API reference

TLD Intelligence API

Get detailed intelligence about a TLD including pricing, restrictions, registrar support, and usage statistics. Use this reference to choose an operation and integrate its documented response contract.

Operations

GET /v1/tlds View API reference
GET /v1/tlds/:tld View API reference

GET /v1/tlds

Operation: getTlds Credits and authentication: Free Authentication optional
GET /v1/tlds Credits: 0

Query parameters

Parameter Type required
type string
Allowed values gtldcctldnew-gtldidn
optional
trust_tier string
Allowed values premiumstandardeconomysuspicious
optional
use_case string optional

Response fields

Field Type
tlds[] object[]
tlds[] object
tlds[].tld string
tlds[].type string
tlds[].name string
tlds[].rdap_supported boolean
tlds[].trust_tier string
tlds[].popularity_rank integer
tlds[].registration_usd number
total integer
by_type object
by_type.gTLD integer
by_type.ccTLD integer
by_type.newTLD integer
by_type.idn integer
by_trust_tier object
by_trust_tier.premium integer
by_trust_tier.standard integer
by_trust_tier.economy integer
use_case string
meta object

Example request

curl "https://domscan.net/v1/tlds?type=gtld&trust_tier=premium&use_case=startup"
const response = await fetch("https://domscan.net/v1/tlds?type=gtld&trust_tier=premium&use_case=startup");
const data = await response.json();
console.log(data);
import requests

response = requests.get(
    "https://domscan.net/v1/tlds?type=gtld&trust_tier=premium&use_case=startup",
)
print(response.json())
package main

import (
	"fmt"
	"io"
	"net/http"
)

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/tlds?type=gtld&trust_tier=premium&use_case=startup", nil)
	if err != nil {
		panic(err)
	}

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	data, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Status, string(data))
}
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/tlds?type=gtld&trust_tier=premium&use_case=startup")
request = Net::HTTP::Get.new(uri)

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end
puts JSON.pretty_generate(JSON.parse(response.body))

Example response

{
  "tlds": [
    {
      "tld": "com",
      "type": "gTLD",
      "name": "example",
      "rdap_supported": false,
      "trust_tier": "premium",
      "popularity_rank": 1,
      "registration_usd": 0.5
    }
  ],
  "total": 1,
  "by_type": {
    "gTLD": 1,
    "ccTLD": 1,
    "newTLD": 1,
    "idn": 1
  },
  "by_trust_tier": {
    "premium": 1,
    "standard": 1,
    "economy": 1
  },
  "use_case": "example",
  "meta": {}
}

HTTP status codes

  • 200 OK
  • 429 Too Many Requests

GET /v1/tlds/:tld

Operation: getTldDetail Credits and authentication: 1 Authentication required
GET /v1/tlds/:tld Credits: 1

Query parameters

Parameter Type required
tld string required

Response fields

Field Type
tld string
type string
name string
description string
introduced integer
operator string | null
country string | null
restrictions string
rdap_supported boolean
rdap_endpoint string | null
idn_supported boolean
dnssec_supported boolean
pricing object
pricing.registration_usd number
pricing.renewal_usd number
pricing.transfer_usd number
pricing.currency string
pricing.source string
popularity object
popularity.rank integer
popularity.tier string
popularity.use_cases[] string[]
trust object
trust.score number
trust.tier string
trust.notes string | null
meta object

Example request

curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/tlds/com"
const response = await fetch("https://domscan.net/v1/tlds/com", {
  headers: { "X-API-Key": process.env.DOMSCAN_API_KEY },
});
const data = await response.json();
console.log(data);
import os
import requests

response = requests.get(
    "https://domscan.net/v1/tlds/com",
    headers={"X-API-Key": os.environ["DOMSCAN_API_KEY"]},
)
print(response.json())
package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	req, err := http.NewRequest(http.MethodGet, "https://domscan.net/v1/tlds/com", nil)
	if err != nil {
		panic(err)
	}
	req.Header.Set("X-API-Key", os.Getenv("DOMSCAN_API_KEY"))

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()

	data, err := io.ReadAll(resp.Body)
	if err != nil {
		panic(err)
	}
	fmt.Println(resp.Status, string(data))
}
require "json"
require "net/http"

uri = URI("https://domscan.net/v1/tlds/com")
request = Net::HTTP::Get.new(uri)
request["X-API-Key"] = ENV.fetch("DOMSCAN_API_KEY")

response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
  http.request(request)
end
puts JSON.pretty_generate(JSON.parse(response.body))

Example response

{
  "tld": "com",
  "type": "gTLD",
  "name": "Commercial",
  "description": "The most popular and trusted domain extension worldwide",
  "introduced": 1985,
  "operator": "Verisign",
  "restrictions": "None - open registration",
  "rdap_supported": true,
  "rdap_endpoint": "https://rdap.verisign.com/com/v1/",
  "idn_supported": true,
  "dnssec_supported": true,
  "pricing": {
    "registration_usd": 12,
    "renewal_usd": 12,
    "transfer_usd": 12,
    "currency": "USD",
    "source": "market_average"
  },
  "popularity": {
    "rank": 1,
    "tier": "top10",
    "use_cases": [
      "business",
      "personal",
      "startup",
      "enterprise",
      "tech",
      "e-commerce",
      "blog",
      "portfolio"
    ]
  },
  "trust": {
    "score": 100,
    "tier": "premium",
    "notes": "Most trusted TLD globally"
  },
  "meta": {
    "served_by": "pop=MAD country=ES"
  }
}

HTTP status codes

  • 200 OK
  • 401 Unauthorized
  • 402 Payment Required
  • 404 Not Found
  • 429 Too Many Requests

Reference resources