schemas/tld-registry.schema.json

tld-registry.schema.json

JSON Schema for the tld_registry dataset. Versioned alongside the data.

Download tld-registry.schema.jsonView dataset

Overview#overview

nametld-registry
version2026.08
fields10
used_bytld_registry
draft2020-12
licenseCC-BY-4.0

Field definitions#fields

FieldTypeRequiredDescription
tldstringrequiredTLD label without the leading dot (IANA A-label for IDN TLDs).
typeenumrequiredgeneric | country_code | sponsored | infrastructure | generic_restricted | test.
operatorstring | nulloptionalRegistry operator (sponsoring organisation) as listed by IANA.
countrystring | nulloptionalTerritory name for country-code TLDs; null for generic TLDs.
is_idnbooleanoptionalThe TLD is an internationalised (non-ASCII) label.
unicode_tldstring | nulloptionalUnicode form of the TLD when is_idn is true.
iana_urlstring · urioptionalCanonical IANA Root Zone Database page for the TLD.
sourcesarray · enumrequiredProvenance.
verification_statusenumrequiredSee verification statuses.
last_checkedstring · date-timerequiredISO 8601 timestamp.

JSON Schema#preview

{
  "$id": "https://opendomaindata.org/schemas/tld-registry.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "TldRegistry",
  "description": "Registry facts for a single top-level domain, as published by the IANA Root Zone Database.",
  "version": "2026.08",
  "type": "object",
  "required": ["tld", "type", "sources", "verification_status", "last_checked"],
  "properties": {
    "tld": {
      "type": "string",
      "pattern": "^[a-z0-9]([a-z0-9.-]*[a-z0-9])?$",
      "description": "TLD label without the leading dot (IANA A-label for IDN TLDs)."
    },
    "type": {
      "type": "string",
      "enum": ["generic", "country_code", "sponsored", "infrastructure", "generic_restricted", "test"],
      "description": "IANA Root Zone Database TLD classification."
    },
    "operator": { "type": ["string", "null"], "description": "Registry operator (sponsoring organisation) as listed by IANA." },
    "country": { "type": ["string", "null"], "description": "Territory name for country-code TLDs; null for generic TLDs." },
    "is_idn": { "type": "boolean", "description": "The TLD is an internationalised (non-ASCII) label." },
    "unicode_tld": { "type": ["string", "null"], "description": "Unicode form of the TLD when is_idn is true." },
    "iana_url": {
      "type": "string",
      "format": "uri",
      "description": "Canonical IANA Root Zone Database page for the TLD."
    },
    "sources": {
      "type": "array",
      "minItems": 1,
      "items": { "type": "string", "enum": ["iana", "rdap", "registrar_docs", "submission", "cross_site_feed"] }
    },
    "verification_status": {
      "type": "string",
      "enum": ["unknown", "public_sources", "independently_tested", "registrar_submitted", "registrar_verified", "deprecated"]
    },
    "last_checked": { "type": "string", "format": "date-time" }
  },
  "additionalProperties": false
}

Validation example#validation

Validate a record locally using any JSON Schema validator. The schema is draft 2020-12; for ajv use the 2020 import.

import Ajv from "ajv/dist/2020";
import schema from "https://opendomaindata.org/schemas/tld-registry.schema.json" assert { type: "json" };

const ajv = new Ajv();
const validate = ajv.compile(schema);
const ok = validate(record);
if (!ok) console.error(validate.errors);

Changelog#changelog

Schema changes are recorded in the project changelog and follow the dataset release tag.