TLDs
A curated set of top-level domains from the ICANN root zone, classified as gTLD, ccTLD, or sTLD, with the operating registry, whether registration is restricted to specific entities, and whether the TLD supports internationalised domain names.
Quick fetch
Stable, immutable URL. CORS-enabled. No auth.
curl https://staticdata.dev/v1/tlds.json
Or use as a typed import:
import { tlds } from "https://staticdata.dev/v1/tlds.ts"
Formats
- JSON 14.9 KB
/v1/tlds.json
min: 10.6 KB · /v1/tlds.min.json
- CSV 4.1 KB
/v1/tlds.csv
- TypeScript 15.1 KB
/v1/tlds.ts
export const tlds
type Tld = (typeof tlds)[number]
Schema
Each record in the dataset has the following shape.
| Field | Type | Description | Example |
|---|---|---|---|
| tld | string | Top-level domain with leading dot | .com |
| type | "gTLD" | "ccTLD" | "sTLD" | Classification | gTLD |
| country? | string | null | ISO 3166-1 alpha-2 (only for ccTLDs) | |
| registry | string | Operating registry name | VeriSign |
| restricted | boolean | Whether registration is restricted by eligibility rules | false |
| idn | boolean | Whether the TLD supports IDN registrations | false |
Preview
First 10 records.
| tld | type | country | registry | restricted | idn |
|---|---|---|---|---|---|
| .com | gTLD | VeriSign | false | false | |
| .org | gTLD | Public Interest Registry | false | false | |
| .net | gTLD | VeriSign | false | false | |
| .info | gTLD | Identity Digital | false | false | |
| .biz | gTLD | GoDaddy Registry | false | false | |
| .name | gTLD | VeriSign | true | false | |
| .pro | gTLD | Identity Digital | true | false | |
| .dev | gTLD | Charleston Road Registry (Google) | false | false | |
| .app | gTLD | Charleston Road Registry (Google) | false | false | |
| .io | ccTLD | IO | Internet Computer Bureau | false | false |
Fetch examples
Drop-in snippets in five languages.
curl -sSL https://staticdata.dev/v1/tlds.json | jq '.[0]' import type { Tld } from "https://staticdata.dev/v1/tlds.ts";
const res = await fetch("https://staticdata.dev/v1/tlds.min.json");
if (!res.ok) throw new Error(`Fetch failed: ${res.status}`);
const tlds: Tld[] = await res.json();
console.log(tlds[0]); import urllib.request, json
with urllib.request.urlopen("https://staticdata.dev/v1/tlds.min.json") as r:
tlds = json.load(r)
print(tlds[0]) package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
resp, err := http.Get("https://staticdata.dev/v1/tlds.min.json")
if err != nil { panic(err) }
defer resp.Body.Close()
var data []map[string]any
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
panic(err)
}
fmt.Println(data[0])
} use serde_json::Value;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let body = ureq::get("https://staticdata.dev/v1/tlds.min.json").call()?.into_string()?;
let data: Vec<Value> = serde_json::from_str(&body)?;
println!("{:?}", data.first());
Ok(())
} Sources and methodology
The ICANN root zone contains over 1,400 TLDs, the majority of which are vendor-specific brand TLDs (.google, .amazon) that are not generally available for registration. This dataset focuses on TLDs developers actually encounter: the original gTLDs (.com, .org, .net), the major ccTLDs, the sponsored TLDs that have meaningful real-world use (.gov, .edu, .aero), and the more popular new gTLDs.
The restricted flag is true when registration is gated on eligibility (e.g., .gov requires a US government entity, .edu requires accreditation, .bank requires being a bank, .aero requires being in the aviation sector). It is false when registration is open to anyone.
The idn flag indicates whether the registry accepts internationalised domain name registrations using non-ASCII characters in the second-level domain.
Internationalised TLDs (IDN ccTLDs like .рф, .中国, .한국) are not yet included.
Versioning
URLs under /v1/ are immutable. The data they return will not change in a way
that breaks consumers. Schema-incompatible updates ship under a new version path. See the
tlds changelog for this dataset's history.