schemas/tld-registry.schema.json
tld-registry.schema.json
JSON Schema for the tld_registry dataset. Versioned alongside the data.
Overview#overview
Field definitions#fields
| Field | Type | Required | Description |
|---|---|---|---|
| tld | string | required | TLD label without the leading dot (IANA A-label for IDN TLDs). |
| type | enum | required | generic | country_code | sponsored | infrastructure | generic_restricted | test. |
| operator | string | null | optional | Registry operator (sponsoring organisation) as listed by IANA. |
| country | string | null | optional | Territory name for country-code TLDs; null for generic TLDs. |
| is_idn | boolean | optional | The TLD is an internationalised (non-ASCII) label. |
| unicode_tld | string | null | optional | Unicode form of the TLD when is_idn is true. |
| iana_url | string · uri | optional | Canonical IANA Root Zone Database page for the TLD. |
| sources | array · enum | required | Provenance. |
| verification_status | enum | required | See verification statuses. |
| last_checked | string · date-time | required | ISO 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.