API Documentation
Complete reference for the DomScan Domain Intelligence API
Overview
DomScan provides a comprehensive RESTful API for domain intelligence. Check availability across 1000+ TLDs, get AI-powered name suggestions, estimate domain values, monitor domain health, detect typosquatting threats, and check social handle availability.
Authentication
No authentication is required to get started. Your account begins with 10,000 free credits per month, so you can make requests immediately.
When API keys are introduced, they will be passed via the X-API-Key header:
curl -H "X-API-Key: your-api-key" "https://domscan.net/v1/status?name=example&tlds=com"
Base URL
All API requests should be made to:
https://domscan.net
Quickstart
Make your first availability check in seconds. These examples call the /v1/status endpoint and return availability across multiple TLDs.
curl "https://domscan.net/v1/status?name=launch&tlds=com,io,ai&prefer_cache=1"
const response = await fetch(
"https://domscan.net/v1/status?name=launch&tlds=com,io,ai&prefer_cache=1"
);
const data = await response.json();
console.log(data.results);
import requests
response = requests.get(
"https://domscan.net/v1/status",
params={"name": "launch", "tlds": "com,io,ai", "prefer_cache": 1},
timeout=10,
)
print(response.json()["results"])
package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
url := "https://domscan.net/v1/status?name=launch&tlds=com,io,ai&prefer_cache=1"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var payload map[string]any
json.NewDecoder(resp.Body).Decode(&payload)
fmt.Println(payload["results"])
}
Request Headers
DomScan works without authentication during beta. If/when keys are required, send them in the X-API-Key header.
- Content-Type:
application/json(required for POST requests) - Accept:
application/json(optional but recommended) - X-API-Key: API key for authenticated requests (future)
Check Domain Availability
Check if a domain name is available across one or more TLDs.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| name required | string | Domain label without TLD (e.g., "mycompany") |
| tlds required | string | Comma-separated list of TLDs to check (max 50) |
| prefer_cache optional | boolean | Use cached results when available (recommended) |
Example Request
curl "https://domscan.net/v1/status?name=startup&tlds=com,io,co&prefer_cache=1"
const url = new URL("https://domscan.net/v1/status");
url.searchParams.set("name", "startup");
url.searchParams.set("tlds", "com,io,co");
url.searchParams.set("prefer_cache", "1");
const response = await fetch(url);
const data = await response.json();
console.log(data.results);
import requests
params = {"name": "startup", "tlds": "com,io,co", "prefer_cache": 1}
data = requests.get("https://domscan.net/v1/status", params=params).json()
print(data["results"])
"startup",
"tlds" => "com,io,co",
"prefer_cache" => 1
]);
$response = file_get_contents("https://domscan.net/v1/status?$query");
echo $response;
?>
Example Response
{
"name": "startup",
"results": [
{
"domain": "startup.com",
"tld": "com",
"available": false,
"source": "rdap",
"checked_at": "2025-01-05T10:30:00.000Z"
},
{
"domain": "startup.io",
"tld": "io",
"available": true,
"source": "rdap",
"checked_at": "2025-01-05T10:30:00.000Z"
}
],
"meta": {
"served_by": "pop=LAX country=US",
"worker_version": "2.0.0"
}
}
Bulk Domain Check
Check availability of multiple complete domain names in a single request.
Request Body
| Field | Type | Description |
|---|---|---|
| domains required | string[] | Array of complete domain names (max 50) |
| options.prefer_cache optional | boolean | Use cached results when available |
Example Request
curl -X POST "https://domscan.net/v1/status/bulk" \
-H "Content-Type: application/json" \
-d '{"domains": ["mybrand.com", "mybrand.io"], "options": {"prefer_cache": true}}'
const response = await fetch("https://domscan.net/v1/status/bulk", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
domains: ["mybrand.com", "mybrand.io"],
options: { prefer_cache: true }
})
});
const data = await response.json();
console.log(data.results);
import requests
payload = {
"domains": ["mybrand.com", "mybrand.io"],
"options": {"prefer_cache": True}
}
response = requests.post(
"https://domscan.net/v1/status/bulk",
json=payload,
timeout=10
)
print(response.json()["results"])
package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
payload := map[string]any{
"domains": []string{"mybrand.com", "mybrand.io"},
"options": map[string]bool{"prefer_cache": true},
}
body, _ := json.Marshal(payload)
resp, err := http.Post("https://domscan.net/v1/status/bulk", "application/json", bytes.NewReader(body))
if err != nil {
panic(err)
}
defer resp.Body.Close()
fmt.Println(resp.Status)
}
Domain Suggestions
Generate AI-powered domain name suggestions based on keywords. Returns brandable, short, and keyword-rich options with availability status.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| keywords required | string | Comma-separated keywords (e.g., "tech,cloud") |
| limit optional | number | Max suggestions to return (default: 20, max: 100) |
| tlds optional | string | TLDs to use (default: "com,ai,app") |
| style optional | string | Style: brandable, short, keyword-rich, pronounceable |
Example Request
curl "https://domscan.net/v1/suggest?keywords=cloud,sync&limit=10&style=brandable"
const params = new URLSearchParams({
keywords: "cloud,sync",
limit: "10",
style: "brandable"
});
const response = await fetch("https://domscan.net/v1/suggest?" + params);
console.log(await response.json());
import requests
params = {"keywords": "cloud,sync", "limit": 10, "style": "brandable"}
data = requests.get("https://domscan.net/v1/suggest", params=params).json()
print(data["suggestions"])
Example Response
{
"suggestions": [
{
"name": "cloudsync",
"domain": "cloudsync.io",
"tld": "io",
"score": 95,
"styles": ["brandable", "pronounceable"],
"method": "combination",
"available": true
}
],
"keywords": ["cloud", "sync"],
"generated_count": 10,
"available_count": 4
}
Domain Valuation
Get algorithmic value estimates based on domain characteristics like length, TLD tier, dictionary words, and brandability patterns.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Complete domain name (e.g., "startup.com") |
Example Request
curl "https://domscan.net/v1/value?domain=startup.io"
Example Response
{
"domain": "startup.io",
"label": "startup",
"tld": "io",
"estimate": {
"low": 350,
"mid": 700,
"high": 1750,
"currency": "USD"
},
"factors": {
"length": 7,
"tldTier": "premium",
"isDictionaryWord": true,
"isBrandable": true,
"pronounceability": 0.85
},
"confidence": 0.65
}
Valuate multiple domains in one request. Request body: {"domains": ["a.com", "b.io"]}
Domain Health
Comprehensive health checks including DNS configuration, SSL certificates, email deliverability, and security headers.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Domain to check (e.g., "example.com") |
Example Response
{
"domain": "example.com",
"score": 85,
"grade": "A",
"details": {
"dns": { "score": 100, "hasA": true, "hasMX": true },
"ssl": { "score": 90, "valid": true, "issuer": "Let's Encrypt" },
"email": { "score": 80, "hasSPF": true, "hasDMARC": true },
"security": { "score": 70, "hasHSTS": true }
},
"warnings": ["Missing DNSSEC"]
}
Quick health check - only DNS and HTTPS reachability. Faster but less comprehensive.
Typosquatting Detection
Detect typosquatting threats by analyzing common typos, homoglyphs, and brand impersonation risks.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Domain to check for typosquatting variants |
| limit optional | number | Max permutations to check (default: 50) |
Example Response
{
"domain": "google.com",
"permutations_generated": 50,
"registered_typos": [
{
"domain": "gooogle.com",
"type": "repetition",
"risk": "high",
"registered": true
},
{
"domain": "googIe.com",
"type": "homoglyph",
"risk": "critical",
"registered": true
}
],
"threat_level": "critical",
"risk_summary": {
"critical": 2,
"high": 5,
"medium": 10,
"low": 8
}
}
Domain Compare
Compare multiple domains side-by-side. Get availability, valuation estimates, brand scores, and intelligent recommendations.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domains required | string | Comma-separated domain names (2-10 domains) |
Example Request
curl "https://domscan.net/v1/compare?domains=startup.com,startup.io,startup.ai"
Example Response
{
"domains": [
{
"domain": "startup.io",
"available": true,
"valuation": { "estimate_usd": 2500, "confidence": 0.7 },
"score": { "overall": 85, "brandability": 90 },
"tld_info": { "type": "ccTLD", "trust_tier": "premium" },
"recommendation_rank": 85,
"recommendation_reason": "available, premium .io TLD, excellent brand score"
}
],
"recommendation": {
"best_available": "startup.io",
"best_overall": "startup.com",
"best_value": "startup.ai",
"reasoning": "startup.io is recommended: available, premium TLD"
}
}
TLD Intelligence
Get detailed information about TLDs including pricing, restrictions, trust scores, and recommended use cases.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| type optional | string | Filter by type: gTLD, ccTLD, newTLD, idn |
| trust_tier optional | string | Filter by trust: premium, standard, economy |
| use_case optional | string | Get TLDs for a use case (e.g., "startup", "tech") |
Example Response
{
"tld": "io",
"type": "ccTLD",
"name": "British Indian Ocean Territory",
"description": "Popular with tech startups and SaaS companies",
"introduced": 1997,
"restrictions": "None - open registration",
"rdap_supported": true,
"pricing": {
"registration_usd": 40,
"renewal_usd": 40
},
"popularity": { "rank": 5, "tier": "top10", "use_cases": ["startup", "tech", "saas"] },
"trust": { "score": 85, "tier": "premium" }
}
DNS Security Analysis
Comprehensive email and DNS security analysis including SPF, DKIM, DMARC, DNSSEC, and CAA records.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Domain to analyze |
Example Response
{
"domain": "example.com",
"spf": { "exists": true, "valid": true, "policy": "fail" },
"dkim": { "exists": true, "selectors_found": ["google", "selector1"] },
"dmarc": { "exists": true, "policy": "reject", "percentage": 100 },
"dnssec": { "enabled": true, "valid": true },
"caa": { "exists": true, "issuers": ["letsencrypt.org"] },
"security_score": 92,
"security_grade": "A",
"recommendations": ["Consider adding MTA-STS for encrypted email delivery"]
}
DNS Propagation Checker
Check DNS record propagation across 13 global DNS servers worldwide.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Domain to check |
| type optional | string | Record type: A, AAAA, CNAME, MX, TXT, NS (default: A) |
| expected optional | string | Expected value to check for |
Example Response
{
"domain": "example.com",
"record_type": "A",
"propagation_percentage": 100,
"fully_propagated": true,
"consistent": true,
"unique_values": ["93.184.216.34"],
"results": [
{
"server": { "name": "Cloudflare US", "location": "Global Anycast" },
"success": true,
"records": ["93.184.216.34"],
"ttl": 86400,
"response_time_ms": 12
}
],
"summary": {
"total_servers": 13,
"successful": 13,
"failed": 0
}
}
Get the list of DNS servers used for propagation checks.
DNS Lookup
Query DNS records for any domain. Supports A, AAAA, MX, NS, TXT, CNAME, CAA, SOA, and more.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Domain name to query |
| type optional | string | Record type: A, AAAA, MX, NS, TXT, CNAME, CAA, SOA (default: A) |
Example Response
{
"domain": "example.com",
"type": "A",
"records": [
{ "value": "93.184.216.34", "ttl": 300 }
],
"query_time_ms": 45
}
Get all DNS record types for a domain in a single request.
Domain Profile
Get normalized RDAP registration data including registrar, creation date, expiration, nameservers, and DNSSEC status.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Full domain name (e.g., example.com) |
Example Response
{
"domain": "example.com",
"registrar": "IANA",
"created": "1995-08-14T04:00:00Z",
"updated": "2023-08-14T07:01:38Z",
"expires": "2024-08-13T04:00:00Z",
"nameservers": ["a.iana-servers.net", "b.iana-servers.net"],
"dnssec": true,
"status": ["clientDeleteProhibited", "serverUpdateProhibited"]
}
Redirect Chain
Follow URL redirect chains to detect HTTPS upgrades, domain changes, and final landing pages.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| url required | string | Starting URL to follow |
| max_redirects optional | number | Maximum redirects to follow (default: 10) |
Example Response
{
"original_url": "http://example.com",
"final_url": "https://www.example.com/",
"redirect_count": 2,
"chain": [
{ "url": "http://example.com", "status": 301, "location": "https://example.com" },
{ "url": "https://example.com", "status": 301, "location": "https://www.example.com/" }
],
"https_upgrade": true,
"total_time_ms": 234
}
Tech Stack Detection
Detect technologies used by a website: CDN, CMS, frameworks, analytics, and more.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Domain to analyze |
Example Response
{
"domain": "example.com",
"technologies": {
"cdn": ["Cloudflare"],
"cms": [],
"analytics": ["Google Analytics"],
"frameworks": ["React"],
"servers": ["nginx"]
},
"headers": {
"server": "cloudflare",
"x-powered-by": null
}
}
Website Categorization
Classify websites into categories: e-commerce, tech, news, blogs, and more.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain required | string | Domain to categorize |
Example Response
{
"domain": "github.com",
"categories": ["Technology", "Software Development", "Code Hosting"],
"primary_category": "Technology",
"confidence": 0.95
}
Domain Similarity
Compare domains for similarity. Useful for detecting typosquatting with multiple algorithms.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain1 required | string | First domain to compare |
| domain2 required | string | Second domain to compare |
Example Response
{
"domain1": "google.com",
"domain2": "g00gle.com",
"similarity": {
"levenshtein": 0.86,
"jaro_winkler": 0.93,
"visual": 0.91
},
"is_similar": true,
"typosquatting_risk": "high"
}
TLD Coverage
Get the list of supported TLDs and RDAP endpoint health.
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| live optional | boolean | Test RDAP endpoints live (slower) |
Response Format
All responses are JSON. Each domain result contains these common fields:
domain- Complete domain nameavailable- Boolean availability statussource- "rdap" or "cache"checked_at- ISO 8601 timestamperror- Present if an error occurred
HTTP Status Codes
200 OK - Request successful
400 Bad Request - Invalid parameters
429 Too Many Requests - Rate limit exceeded
500 Server Error - Internal error
502 Bad Gateway - Upstream RDAP error
Error Codes
Rate Limits
- Cached requests (prefer_cache=1): Unlimited
- Fresh RDAP lookups: ~100 requests/minute
- Bulk endpoint: 50 domains per request
- TLDs per request: 50 maximum
prefer_cache=1 for best performance and to avoid rate limits.
Caching
DomScan uses intelligent caching for fast responses:
- Available domains: 60 seconds
- Registered domains: 6 hours
Best Practices
1. Always Use Caching
Add prefer_cache=1 to all requests unless you specifically need fresh data.
2. Batch Your Requests
Use the bulk endpoint instead of making multiple individual requests.
3. Check Coverage First
Verify which TLDs are supported: GET /v1/coverage
4. Handle Errors Gracefully
Implement retry logic with exponential backoff for transient failures.
Social Handle Availability
Check username availability across social media platforms like GitHub and Reddit.
Query Parameters
Example Response