GET GET /check

Check Domain Availability

Check if a domain name is available for registration across multiple TLDs.

Endpoint

GET https://api.domainkit.bot/check

Parameters

Parameter Type Required Description
name string Yes Domain name to check (without TLD)
tld string No Specific TLD to check. If omitted, checks all supported TLDs.

Note: The tld parameter accepts a single TLD only (e.g., com), not comma-separated values. To check multiple specific TLDs, make separate requests or omit tld to check all.

Request

curl "https://api.domainkit.bot/check?name=mycoolstartup"

With a specific TLD:

curl "https://api.domainkit.bot/check?name=mycoolstartup&tld=com"

Response

{
  "name": "mycoolstartup",
  "results": [
    {
      "domain": "mycoolstartup.com",
      "tld": "com",
      "available": true,
      "status": ["undelegated", "inactive"],
      "premium": false,
      "source": "rdap",
      "checkedAt": "2024-01-30T12:00:00Z",
      "responseMs": 180
    },
    {
      "domain": "mycoolstartup.io",
      "tld": "io",
      "available": false,
      "status": ["active"],
      "premium": false,
      "source": "dns",
      "checkedAt": "2024-01-30T12:00:00Z",
      "responseMs": 45
    },
    {
      "domain": "mycoolstartup.dev",
      "tld": "dev",
      "available": true,
      "status": ["undelegated", "inactive"],
      "premium": false,
      "source": "rdap",
      "checkedAt": "2024-01-30T12:00:00Z",
      "responseMs": 210
    }
  ],
  "totalMs": 250,
  "timestamp": "2024-01-30T12:00:00Z"
}

Response Fields

Top-Level Fields

Field Type Description
name string The domain name that was checked (without TLD)
results array List of domain check results
totalMs number Total time to check all domains in milliseconds
timestamp string ISO 8601 timestamp when the check was performed

Result Fields

Field Type Description
domain string Full domain name checked
tld string Top-level domain
available boolean true if available for registration
status array Array of status strings (see below)
premium boolean true if this is a premium-priced domain
source string How availability was determined (see below)
checkedAt string ISO 8601 timestamp of this specific check
responseMs number Response time for this check in milliseconds
error string Error message if the check failed (omitted on success)

Status Values

Status Description
unknown Could not determine status
undelegated No DNS records (domain not set up)
inactive Available for registration
active Registered/taken
premium Premium pricing applies

Source Values

Source Description
dns Determined via DNS nameserver lookup
rdap Confirmed via RDAP query
dns+cache Cached DNS result
rdap+cache Cached RDAP result

Errors

Code Error Description
400 missing_parameter The name parameter is required
400 invalid_name Name must be 1-63 characters, alphanumeric with hyphens
400 unsupported_tld Specified TLD is not supported
429 rate_limit_exceeded Too many requests

Code Examples

curl

curl "https://api.domainkit.bot/check?name=mycoolstartup"

Python

import requests

response = requests.get(
    "https://api.domainkit.bot/check",
    params={"name": "mycoolstartup"}
)
data = response.json()

print(f"Checked: {data['name']}")
print(f"Total time: {data['totalMs']}ms")

for result in data["results"]:
    status = "" if result["available"] else ""
    premium = " [PREMIUM]" if result["premium"] else ""
    print(f"{status} {result['domain']}{premium} ({result['source']}, {result['responseMs']}ms)")

JavaScript

const response = await fetch(
  "https://api.domainkit.bot/check?name=mycoolstartup"
);
const data = await response.json();

console.log(`Checked: ${data.name}`);
console.log(`Total time: ${data.totalMs}ms`);

data.results.forEach(result => {
  const status = result.available ? "" : "";
  const premium = result.premium ? " [PREMIUM]" : "";
  console.log(`${status} ${result.domain}${premium} (${result.source}, ${result.responseMs}ms)`);
});

Go

resp, err := http.Get("https://api.domainkit.bot/check?name=mycoolstartup")
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

var data struct {
    Name      string `json:"name"`
    Results   []struct {
        Domain     string   `json:"domain"`
        TLD        string   `json:"tld"`
        Available  bool     `json:"available"`
        Status     []string `json:"status"`
        Premium    bool     `json:"premium"`
        Source     string   `json:"source"`
        ResponseMs int64    `json:"responseMs"`
    } `json:"results"`
    TotalMs   int64  `json:"totalMs"`
    Timestamp string `json:"timestamp"`
}

if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
    log.Fatal(err)
}

fmt.Printf("Checked: %s (total: %dms)\n", data.Name, data.TotalMs)
for _, r := range data.Results {
    status := "✗"
    if r.Available {
        status = "✓"
    }
    premium := ""
    if r.Premium {
        premium = " [PREMIUM]"
    }
    fmt.Printf("%s %s%s (%s, %dms)\n", status, r.Domain, premium, r.Source, r.ResponseMs)
}

Notes

  • Domain names are automatically normalized to lowercase
  • Special characters and spaces are rejected
  • Maximum name length is 63 characters (DNS limit)
  • Results are cached for improved performance
  • Premium domain detection is based on registry notices
────────────────────────────────────────────────────────────────────────────────
📄 Raw markdown: /docs/api/availability.md