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