IDN Variants (idn_variants)
Overview
datapulse_idn_variants computes the variant set of an internationalized label under ICANN’s Root Zone Label Generation Rules (RZ-LGR 6, 23 September 2025). These rules decide which variants of an IDN top-level domain may be delegated, and the 2026 New gTLD round evaluates IDN strings under them.
Two kinds of variant come back:
| Disposition | Meaning in the root zone |
|---|---|
allocatable | May be delegated, only to the applicant for the original label, alongside it |
blocked | Reserved: may not be delegated to anyone, because it is too confusable with the original |
The set has two sources, as ICANN uses them:
- The label’s Element LGR (the rules for its script) gives its allocatable and blocked variants within that script, such as the traditional and simplified forms of a Chinese label.
- The Common LGR holds every collision across scripts, and every variant in it is blocked. Its variants that the Element LGR does not list are added as blocked with
common_lgr: true. They are often the majority: the Japanese rules relate集團only to集団, while the Common LGR also blocks the Chinese forms集团and集糰. The Korean rules relate it to nothing, so all three come from the Common LGR.
Two flags describe each variant, and they are independent:
cross_script: true: the variant is written, wholly or partly, in a script the label does not use.paypalhas 2,242 such variants (its Cyrillic lookalikes such asраураӏ, and Latin–Cyrillic mixes), all listed by the Latin rules themselves.common_lgr: true: only the Common LGR gives the label this variant. For集團under the Korean rules all three variants arecommon_lgr, yet none iscross_script: they are Han like the label.
The rules are root-zone policy, but the relationships they encode (Chinese character forms, Cyrillic, Greek and Latin lookalikes, Arabic letter shapes) are a sound, sourced guide to confusable second-level names as well. Use them that way for lookalike and impersonation work, saying that the variant set is defined by the root-zone rules.
The computation is local and makes no lookups. It only tells you which names are variants, not whether any of them are registered.
Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
domain | string | Yes | A label (集团) or a domain name (集团.com), as a U-label or an A-label (xn--3bst00m.com). Case, surrounding whitespace and trailing dots are normalized away. An A-label that does not decode to Unicode NFC form is refused, as IDNA 2008 requires |
script | string | No | The Element LGR to use: arabic, armenian, bengali, chinese, cyrillic, devanagari, ethiopic, georgian, greek, gujarati, gurmukhi, hebrew, japanese, kannada, khmer, korean, lao, latin, malayalam, myanmar, oriya, sinhala, tamil, telugu, thaana, thai. Omit to detect it from the label |
limit | integer | No | Variants per page, 1-250. Omit or pass 0 for the default of 100; larger values are capped to 250. A variant is about 200 bytes, so a default page is about 20 KB |
offset | integer | No | Variants to skip before the first returned. Default 0. Use the next_offset of the previous page |
Leftmost label only. For a domain name, only the leftmost label is varied, and each variant is reassembled with the remaining labels unchanged: 集团.com gives 集團.com, 集糰.com and 集団.com. For www.集团.中国 the varied label is www, and the note says so whenever IDN labels follow it. To get the variants of a TLD or of a label further right, pass that label alone.
Han ideographs. A label of Han characters only can be valid under more than one of the Chinese, Japanese and Korean rules, which give different variant sets: 山 under all three, 中国 under Chinese and Japanese (Korean lacks 国). When more than one accepts the label, the call is refused and the error names exactly those that do. Call again with script set to one of them, according to the language the name is meant in. Labels containing kana are Japanese and labels containing hangul are Korean, so those are detected without help.
Response Format
{
"input": "集团.com",
"label": "集团",
"label_ascii": "xn--3bst00m",
"domain": "集团.com",
"domain_ascii": "xn--3bst00m.com",
"script": "chinese",
"lgr_data": "rz-lgr-6-common-23sep25-en.xml",
"complete": true,
"total": 3,
"counts": {"allocatable": 2, "blocked": 1, "other": 0, "rejected": 0, "cross_script": 0, "whole_script": 0, "common_lgr": 0},
"returned": 3,
"allocatable": [
{"label": "集團", "ascii": "xn--ndsv59l", "domain_ascii": "xn--ndsv59l.com", "code_points": "U+96C6 U+5718", "scripts": ["Han"]},
{"label": "集糰", "ascii": "xn--g9z124c", "domain_ascii": "xn--g9z124c.com", "code_points": "U+96C6 U+7CF0", "scripts": ["Han"]}
],
"blocked": [
{"label": "集団", "ascii": "xn--4bsr00m", "domain_ascii": "xn--4bsr00m.com", "code_points": "U+96C6 U+56E3", "scripts": ["Han"]}
]
}
| Field | Meaning |
|---|---|
label, label_ascii | The varied (leftmost) label as U-label and A-label |
domain, domain_ascii | The whole input name. Present only when the input has more than one label, as is each variant’s domain_ascii, the variant reassembled into a full name |
script | The Element LGR used, detected or as given |
lgr_data | The RZ-LGR release the result was computed from |
complete | false when the variant set itself was cut off at 100,000 variants (see Limits). Paging cannot reach past that |
total, counts | The whole variant set, not the page: its size, and the number in each list. cross_script counts the variants using a script the label does not, whole_script those written wholly in another script (a subset of cross_script), and common_lgr the Common LGR additions; all three are already counted in their list |
returned, offset | The variants on this page and the number skipped before them |
truncated, next_offset | More variants exist beyond this page; call again with offset = next_offset |
note | What the page is relative to the whole, a warning when the set is incomplete, and which label was varied when IDN labels follow it |
allocatable, blocked | This page’s variants, each with its Unicode scripts, cross_script: true when it uses a script the label does not, and common_lgr: true for a Common LGR addition. The original label is never listed. Either list may be empty: many labels have no variants at all |
other | Variants with any other disposition, each with its disposition. Normally absent |
rejected | Variants the RZ-LGR lists that are not valid domain names under IDNA 2008, each with its disposition, scripts, cross_script, common_lgr and reason. They are listed so the variant set stays complete, but they cannot be registered or looked up. The usual reason is the bidi rule (RFC 5893): a variant that puts a left-to-right letter among right-to-left ones. The Hebrew קום has one registrable variant (קומ) and 26 rejected ones (קiם, קiמ from the Hebrew rules, and 24 more such as קíם and קιם from the Common LGR). The Latin LGR’s Hebrew ס for o makes 12,492 of microsoft’s 50,399 variants rejected |
Variants the rules mark invalid (a combination a context or whole-label rule forbids) are not variants at all and are never listed, as in ICANN’s reference implementation.
Order and paging
Results come in pages of limit variants, in one fixed order:
- allocatable variants;
- blocked variants written wholly in a script the label does not use: the whole-script lookalikes, the most deceptive kind (
раураӏ, all Cyrillic, forpaypal); - blocked variants written wholly in the label’s own script (
paypál); - blocked variants that mix scripts;
- any other disposition.
Each group is sorted by label, and rejected variants come last within their disposition. The same offset always returns the same page. Walk the set by passing each page’s next_offset until truncated is absent. A page with truncated: true is a subset, not the whole variant set; total and counts describe the whole set.
Size and limits
- Sizes vary widely. Many labels have no variants. A Cyrillic or Greek label has tens to a few hundred (
москва299,католик399). A Latin label grows with its length:google1,599,amazon1,999,paypal2,249,microsoft50,399. Read the first page andcountsbefore deciding to walk the rest; for a brand check, the whole-script lookalikes on page 1 usually matter most. - 100,000 variants at most. Generation stops there with
complete: false. It varies the end of the label first, so the variants that change its first letters, whole-script lookalikes among them, are the likeliest to be missing from an incomplete set. An incomplete set is not every variant. A full set this size takes a few seconds to compute. - Letters only. The RZ-LGR repertoire has no digits and no hyphen, because neither is allowed in a TLD. A label containing either (
abc123,my-brand) is refused, and the error names the character and its position, counting from 1. Such names have no RZ-LGR variant set. - One script per label. A label mixing scripts (Latin
pwith Cyrillicаinpаl) is refused: the rules give it no variant set, though such labels appear among the variants of single-script ones. A mixed-script label is usually itself a lookalike; pass the single-script name it imitates, or find registered lookalikes withdatapulse_dns_searchlabels. Seedatapulse_help(topic="typo_squatting"). scriptmust fit the label. Withscriptset, a label the chosen rules do not accept is refused, and the error says to omitscriptto use the label’s own rules.
Workflow: which variants are registered?
datapulse_idn_variants(domain="集团.com"), paging withnext_offsetiftruncatedis set- Send the
domain_asciivalues todatapulse_live_rdap_bulk(ordatapulse_live_dns_bulk), one{"query": "<domain_ascii>"}item each. - Read each result back with
datapulse_live_rdap(domain_hash=...), then compare registrar, creation date and nameservers against the original (registrant data is GDPR-redacted; seedatapulse_help(topic="registrant_lookup")).
An allocatable variant held by an unrelated party, or any blocked variant registered at all under a second-level registry that does not apply the same rules, deserves a closer look. Corroborate before calling either one abuse: some brands register their own variants defensively.
datapulse_dns_searchlabels finds lookalikes that are already in the corpus by fuzzy match. This tool instead lists, from the published rules, every name that counts as a variant, whether or not it exists. The two complement each other.
Generated from the live server (DataPulse MCP 1.0.0) on October 19, 2026. Your AI assistant reads this page by calling datapulse_help(topic="idn_variants").