Developer Reference
Domain Similarity API Documentation
Domain Similarity API Documentation: Compare two domains for visual and textual similarity using multiple algorithms including Levenshtein distance, Jaro-Winkler similarity, and visual homoglyph analysis. Essential for detecting typosquatting, brand impersonation, and phishing domains.
Domain Similarity
Compare two domains for visual and textual similarity using multiple algorithms including Levenshtein distance, Jaro-Winkler similarity, and visual homoglyph analysis. Essential for detecting typosquatting, brand impersonation, and phishing domains.
GET
/v1/similarity
Query Parameters
| Parameter | Type | Description |
|---|---|---|
| domain1 required | string | First domain (typically the legitimate domain) |
| domain2 required | string | Second domain (potentially suspicious domain) |
Similarity Algorithms
| Algorithm | Description |
|---|---|
levenshtein | Edit distance normalized (0-1) |
jaro_winkler | Prefix-weighted string similarity |
visual | Homoglyph/lookalike character detection |
Example Request
curl "https://domscan.net/v1/similarity?domain1=paypal.com&domain2=paypa1.com"
import requests
# Check multiple suspicious domains
legit = "paypal.com"
suspects = ["paypa1.com", "paypaI.com", "pаypal.com"] # Note: last one has Cyrillic 'а'
for suspect in suspects:
response = requests.get(
"https://domscan.net/v1/similarity",
params={"domain1": legit, "domain2": suspect}
)
data = response.json()
print(f"{suspect}: {data['typosquatting_risk']} risk (visual: {data['similarity']['visual']:.2f})")
Example Response
{
"domain1": "paypal.com",
"domain2": "paypa1.com",
"similarity": {
"levenshtein": 0.86,
"jaro_winkler": 0.93,
"visual": 0.95
},
"is_similar": true,
"typosquatting_risk": "high",
"homoglyphs_detected": ["l → 1"],
"risk_factors": ["character_substitution", "high_visual_similarity"]
}
Response Fields
| Field | Type |
|---|---|
domain1 |
string |
domain2 |
string |
similarity_score |
number |
visual_similarity |
number |
textual_similarity |
number |
is_confusable |
boolean |
risk_level |
string |