Yazım Hatası Taklit Algılaması API ürünü
Kimlik avı veya marka suistimali için kullanılabilecek yazım hatası tehditleri ve benzer alanları algılayın. Bir işlem seçmek ve belgelenen yanıt sözleşmesini entegre etmek için bu referansı kullanın.
İşlemler
GET /v1/typos
GET
/v1/typos
Kredi: 2-3
Sorgu parametreleri
| Parametre | Tür | gerekli |
|---|---|---|
| domain | string | gerekli |
| check_registered |
boolean
Varsayılan
false
|
isteğe bağlı |
| limit |
integer
Varsayılan
100
|
isteğe bağlı |
| include_tld_swap |
boolean
Varsayılan
true
|
isteğe bağlı |
Yanıt alanları
| Alan | Tür |
|---|---|
domain |
string |
name |
string |
tld |
string |
permutations_generated |
integer |
permutations_checked |
integer |
registered_typos[] |
object[] |
registered_typos[] |
object |
registered_typos[].classification |
object |
registered_typos[].classification.status |
string |
registered_typos[].classification.reason |
string |
registered_typos[].classification.evidence |
object |
registered_typos[].classification.evidence.source |
string |
registered_typos[].classification.evidence.method |
string |
registered_typos[].classification.evidence.observed_at |
string |
registered_typos[].classification.evidence.detail |
string |
registered_typos[].classification.checked_at |
string |
registered_typos[].domain |
string |
registered_typos[].name |
string |
registered_typos[].tld |
string |
registered_typos[].type |
string |
registered_typos[].risk |
string |
registered_typos[].description |
string |
registered_typos[].registered |
boolean |
registered_typos[].checked_at |
string |
available_typos |
integer |
unknown_typos |
integer |
risk_summary |
object |
risk_summary.critical |
integer |
risk_summary.high |
integer |
risk_summary.medium |
integer |
risk_summary.low |
integer |
threat_level |
string |
family_summary |
object |
family_summary.generated_by_type |
object |
family_summary.generated_by_risk |
object |
family_summary.registered_by_type |
object |
family_summary.registered_by_risk |
object |
family_summary.top_generated_family |
string | null |
family_summary.top_registered_family |
string | null |
family_summary.critical_or_high_generated_count |
integer |
family_summary.critical_or_high_registered_count |
integer |
family_summary.coverage_ratio |
number |
family_summary.checked_count |
integer |
family_summary.available_count |
integer |
family_summary.unknown_count |
integer |
family_summary.omitted_count |
integer |
family_summary.include_tld_swap |
boolean |
family_summary.requested_limit |
integer |
checked_at |
string |
check_duration_ms |
integer |
meta |
object |
meta.served_by |
string |
meta.cached |
boolean |
meta.query_time_ms |
integer |
meta.registration_check_requested |
boolean |
meta.registration_check_limit |
integer |
Örnek istek
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/typos?domain=google.com&check_registered=false&limit=25&include_tld_swap=true"const response = await fetch("https://domscan.net/v1/typos?domain=google.com&check_registered=false&limit=25&include_tld_swap=true", {
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/typos?domain=google.com&check_registered=false&limit=25&include_tld_swap=true",
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/typos?domain=google.com&check_registered=false&limit=25&include_tld_swap=true", 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/typos?domain=google.com&check_registered=false&limit=25&include_tld_swap=true")
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))Örnek yanıt
{
"domain": "google.com",
"name": "google",
"tld": "com",
"permutations_generated": 100,
"permutations_checked": 95,
"registered_typos": [
{
"domain": "gooogle.com",
"name": "gooogle",
"tld": "com",
"type": "repetition",
"risk": "high",
"description": "Repeated character",
"registered": true
},
{
"domain": "gogle.com",
"name": "gogle",
"tld": "com",
"type": "omission",
"risk": "critical",
"description": "Missing character",
"registered": true
}
],
"available_typos": 50,
"risk_summary": {
"critical": 2,
"high": 5,
"medium": 10,
"low": 28
},
"threat_level": "high",
"checked_at": "2024-01-15T12:00:00Z"
}
HTTP durum kodları
200OK400Hatalı İstek401Yetkisiz402Ödeme Gerekli429Çok Fazla İstek
GET /v1/typos/threats
GET
/v1/typos/threats
Kredi: 12
Sorgu parametreleri
| Parametre | Tür | gerekli |
|---|---|---|
| domain | string | gerekli |
| limit |
integer
Varsayılan
200
|
isteğe bağlı |
| include_tld_swap |
boolean
Varsayılan
true
|
isteğe bağlı |
Yanıt alanları
| Alan | Tür |
|---|---|
domain |
string |
name |
string |
tld |
string |
scan_summary |
object |
scan_summary.permutations_generated |
integer |
scan_summary.permutations_checked |
integer |
scan_summary.permutations_submitted |
integer |
scan_summary.definitive_results |
integer |
scan_summary.unknown_results |
integer |
scan_summary.omitted_results |
integer |
scan_summary.registered_count |
integer |
scan_summary.active_threats |
integer |
scan_summary.available_for_defensive |
integer |
scan_summary.check_limit |
integer |
scan_summary.coverage_truncated |
boolean |
threat_level |
string |
protection_score |
object |
protection_score.score |
integer |
protection_score.grade |
string |
protection_score.interpretation |
object |
protection_score.interpretation.score_meaning |
string |
protection_score.interpretation.factors |
string |
protection_score.interpretation.note |
string |
protection_score.vulnerabilities[] |
object[] |
protection_score.vulnerabilities[] |
object |
protection_score.vulnerabilities[].category |
string |
protection_score.vulnerabilities[].count |
integer |
protection_score.vulnerabilities[].risk |
string |
protection_score.vulnerabilities[].description |
string |
protection_score.recommendations[] |
string[] |
protection_score.factors |
object |
protection_score.factors.length_factor |
integer |
protection_score.factors.homoglyph_factor |
integer |
protection_score.factors.keyboard_factor |
integer |
protection_score.factors.tld_factor |
integer |
threats[] |
object[] |
threats[] |
object |
threats[].classification |
object |
threats[].classification.status |
string |
threats[].classification.reason |
string |
threats[].classification.evidence |
object |
threats[].classification.evidence.source |
string |
threats[].classification.evidence.method |
string |
threats[].classification.evidence.observed_at |
string |
threats[].classification.evidence.detail |
string |
threats[].classification.checked_at |
string |
threats[].domain |
string |
threats[].name |
string |
threats[].tld |
string |
threats[].type |
string |
threats[].risk |
string |
threats[].description |
string |
threats[].registered |
boolean |
threats[].checked_at |
string |
threats[].dns_active |
boolean |
threats[].has_website |
boolean |
threats[].has_mx |
boolean |
threats[].infrastructure |
object |
threats[].threat_indicators[] |
string[] |
threats[].threat_score |
integer |
defensive_opportunities[] |
object[] |
defensive_opportunities[] |
object |
defensive_opportunities[].domain |
string |
defensive_opportunities[].name |
string |
defensive_opportunities[].tld |
string |
defensive_opportunities[].type |
string |
defensive_opportunities[].risk |
string |
defensive_opportunities[].description |
string |
risk_breakdown |
object |
recommendations[] |
string[] |
checked_at |
string |
scan_duration_ms |
integer |
meta |
object |
meta.served_by |
string |
Örnek istek
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/typos/threats?domain=example.com&limit=25&include_tld_swap=true"const response = await fetch("https://domscan.net/v1/typos/threats?domain=example.com&limit=25&include_tld_swap=true", {
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/typos/threats?domain=example.com&limit=25&include_tld_swap=true",
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/typos/threats?domain=example.com&limit=25&include_tld_swap=true", 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/typos/threats?domain=example.com&limit=25&include_tld_swap=true")
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))Örnek yanıt
{
"domain": "example.com",
"name": "example",
"tld": "com",
"scan_summary": {
"permutations_generated": 109,
"permutations_checked": 75,
"permutations_submitted": 75,
"definitive_results": 71,
"unknown_results": 4,
"omitted_results": 0,
"registered_count": 2,
"active_threats": 2,
"available_for_defensive": 69,
"check_limit": 75,
"coverage_truncated": true
},
"threat_level": "high",
"protection_score": {
"score": 2,
"grade": "F",
"interpretation": {
"score_meaning": "Higher score = less vulnerable to typosquatting attacks",
"factors": "Domain length, homoglyph-susceptible characters, keyboard adjacency, TLD popularity, registered typosquats",
"note": "Short, well-known domains score lower because they have a larger inherent attack surface for typosquatting, not because they lack brand protection measures."
},
"vulnerabilities": [
{
"category": "homoglyph",
"count": 4,
"risk": "critical",
"description": "Contains 4 characters with visual lookalikes (e, a, l)"
},
{
"category": "keyboard",
"count": 5,
"risk": "high",
"description": "5 characters have many keyboard neighbors"
},
{
"category": "tld",
"count": 1,
"risk": "medium",
"description": ".com is a high-value TLD commonly targeted by typosquatters"
},
{
"category": "registered_high",
"count": 1,
"risk": "high",
"description": "1 high-risk typosquat domains are registered"
}
],
"recommendations": [
"Consider defensive registrations for common homoglyph variants",
"Consider registering example on alternative TLDs like .net, .org"
],
"factors": {
"length_factor": 90,
"homoglyph_factor": 68,
"keyboard_factor": 75,
"tld_factor": 80
}
},
"threats": [
{
"domain": "xeample.com",
"type": "transposition",
"risk": "high",
"description": "Swapped 'e' and 'x'",
"dns_active": true,
"has_website": true,
"has_mx": false,
"infrastructure": {
"nameservers": []
},
"threat_indicators": [
"Active DNS configuration",
"Domain resolves to IP (potential website)"
],
"threat_score": 75
},
{
"domain": "example.net",
"type": "tld-swap",
"risk": "medium",
"description": "TLD changed from .com to .net",
"dns_active": true,
"has_website": false,
"has_mx": false,
"infrastructure": {
"nameservers": []
},
"threat_indicators": [
"Active DNS configuration"
],
"threat_score": 40
}
],
"defensive_opportunities": [
{
"domain": "3xample.com",
"type": "homoglyph",
"risk": "critical"
},
{
"domain": "ex4mple.com",
"type": "homoglyph",
"risk": "critical"
},
{
"domain": "eaxmple.com",
"type": "transposition",
"risk": "high"
}
],
"risk_breakdown": {
"critical": [],
"high": [
{
"domain": "xeample.com",
"name": "xeample",
"tld": "com",
"type": "transposition",
"risk": "high",
"description": "Swapped 'e' and 'x'",
"registered": true,
"checked_at": "2026-10-09T10:15:29.000Z",
"dns_active": true,
"has_website": true,
"has_mx": false,
"infrastructure": {
"nameservers": []
},
"threat_indicators": [
"Active DNS configuration",
"Domain resolves to IP (potential website)"
],
"threat_score": 75
}
],
"medium": [
{
"domain": "example.net",
"name": "example",
"tld": "net",
"type": "tld-swap",
"risk": "medium",
"description": "TLD changed from .com to .net",
"registered": true,
"checked_at": "2026-10-09T10:15:29.000Z",
"dns_active": true,
"has_website": false,
"has_mx": false,
"infrastructure": {
"nameservers": []
},
"threat_indicators": [
"Active DNS configuration"
],
"threat_score": 40
}
],
"low": []
},
"recommendations": [
"2 registered typosquat domains have active DNS/websites. Monitor for phishing or brand abuse.",
"18 high-risk typosquat domains are available. Consider defensive registration to protect your brand.",
"Your domain has significant typosquatting vulnerability. Set up continuous monitoring for new registrations."
],
"checked_at": "2026-10-09T10:15:30.000Z",
"scan_duration_ms": 4120,
"meta": {
"served_by": "pop=MAD country=ES"
}
}
HTTP durum kodları
200OK400Hatalı İstek401Yetkisiz402Ödeme Gerekli429Çok Fazla İstek500Sunucu Hatası
GET /v1/typos/report
GET
/v1/typos/report
Kredi: 18
Sorgu parametreleri
| Parametre | Tür | gerekli |
|---|---|---|
| domain | string | gerekli |
Yanıt alanları
| Alan | Tür |
|---|---|
domain |
string |
generated_at |
string |
executive_summary |
object |
executive_summary.threat_level |
string |
executive_summary.protection_grade |
string |
executive_summary.active_threats |
integer |
executive_summary.registered_typos |
integer |
executive_summary.immediate_action_required |
boolean |
threat_analysis |
object |
threat_analysis.domain |
string |
threat_analysis.name |
string |
threat_analysis.tld |
string |
threat_analysis.scan_summary |
object |
threat_analysis.scan_summary.permutations_generated |
integer |
threat_analysis.scan_summary.permutations_checked |
integer |
threat_analysis.scan_summary.permutations_submitted |
integer |
threat_analysis.scan_summary.definitive_results |
integer |
threat_analysis.scan_summary.unknown_results |
integer |
threat_analysis.scan_summary.omitted_results |
integer |
threat_analysis.scan_summary.registered_count |
integer |
threat_analysis.scan_summary.active_threats |
integer |
threat_analysis.scan_summary.available_for_defensive |
integer |
threat_analysis.scan_summary.check_limit |
integer |
threat_analysis.scan_summary.coverage_truncated |
boolean |
threat_analysis.threat_level |
string |
threat_analysis.protection_score |
object |
threat_analysis.protection_score.score |
integer |
threat_analysis.protection_score.grade |
string |
threat_analysis.protection_score.interpretation |
object |
threat_analysis.protection_score.interpretation.score_meaning |
string |
threat_analysis.protection_score.interpretation.factors |
string |
threat_analysis.protection_score.interpretation.note |
string |
threat_analysis.protection_score.vulnerabilities[] |
object[] |
threat_analysis.protection_score.vulnerabilities[] |
object |
threat_analysis.protection_score.vulnerabilities[].category |
string |
threat_analysis.protection_score.vulnerabilities[].count |
integer |
threat_analysis.protection_score.vulnerabilities[].risk |
string |
threat_analysis.protection_score.vulnerabilities[].description |
string |
threat_analysis.protection_score.recommendations[] |
string[] |
threat_analysis.protection_score.factors |
object |
threat_analysis.protection_score.factors.length_factor |
integer |
threat_analysis.protection_score.factors.homoglyph_factor |
integer |
threat_analysis.protection_score.factors.keyboard_factor |
integer |
threat_analysis.protection_score.factors.tld_factor |
integer |
threat_analysis.threats[] |
object[] |
threat_analysis.threats[] |
object |
threat_analysis.threats[].classification |
object |
threat_analysis.threats[].classification.status |
string |
threat_analysis.threats[].classification.reason |
string |
threat_analysis.threats[].classification.evidence |
object |
threat_analysis.threats[].classification.evidence.source |
string |
threat_analysis.threats[].classification.evidence.method |
string |
threat_analysis.threats[].classification.evidence.observed_at |
string |
threat_analysis.threats[].classification.evidence.detail |
string |
threat_analysis.threats[].classification.checked_at |
string |
threat_analysis.threats[].domain |
string |
threat_analysis.threats[].name |
string |
threat_analysis.threats[].tld |
string |
threat_analysis.threats[].type |
string |
threat_analysis.threats[].risk |
string |
threat_analysis.threats[].description |
string |
threat_analysis.threats[].registered |
boolean |
threat_analysis.threats[].checked_at |
string |
threat_analysis.threats[].dns_active |
boolean |
threat_analysis.threats[].has_website |
boolean |
threat_analysis.threats[].has_mx |
boolean |
threat_analysis.threats[].infrastructure |
object |
threat_analysis.threats[].threat_indicators[] |
string[] |
threat_analysis.threats[].threat_score |
integer |
threat_analysis.defensive_opportunities[] |
object[] |
threat_analysis.defensive_opportunities[] |
object |
threat_analysis.defensive_opportunities[].domain |
string |
threat_analysis.defensive_opportunities[].name |
string |
threat_analysis.defensive_opportunities[].tld |
string |
threat_analysis.defensive_opportunities[].type |
string |
threat_analysis.defensive_opportunities[].risk |
string |
threat_analysis.defensive_opportunities[].description |
string |
threat_analysis.risk_breakdown |
object |
threat_analysis.recommendations[] |
string[] |
threat_analysis.checked_at |
string |
threat_analysis.scan_duration_ms |
integer |
threat_analysis.meta |
object |
threat_analysis.meta.served_by |
string |
defensive_registration_priority |
object |
monitoring_recommendations[] |
string[] |
estimated_risk_exposure |
string |
meta |
object |
meta.served_by |
string |
meta.report_duration_ms |
integer |
Örnek istek
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/typos/report?domain=example.com"const response = await fetch("https://domscan.net/v1/typos/report?domain=example.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/typos/report?domain=example.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/typos/report?domain=example.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/typos/report?domain=example.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))Örnek yanıt
{
"domain": "example.com",
"generated_at": "2026-08-27T12:00:00Z",
"executive_summary": {
"threat_level": "example",
"protection_grade": "example",
"active_threats": 1,
"registered_typos": 1,
"immediate_action_required": false
},
"threat_analysis": {
"domain": "example.com",
"scan_summary": {
"permutations_generated": 1,
"permutations_checked": 1,
"registered_count": 1,
"active_threats": 1,
"available_for_defensive": 1,
"permutations_submitted": 1,
"definitive_results": 1,
"unknown_results": 1,
"omitted_results": 1,
"check_limit": 1,
"coverage_truncated": false
},
"threat_level": "none",
"threats": [
{
"domain": "example.com",
"type": "domain",
"risk": "critical",
"dns_active": true,
"has_website": false,
"threat_indicators": [
"example"
],
"threat_score": 85,
"classification": {
"status": "present",
"evidence": {
"source": "rdap",
"method": "rdap_lookup",
"observed_at": "2026-08-27T12:00:00Z",
"detail": "example"
},
"checked_at": "2026-08-27T12:00:00Z",
"reason": "blocked"
},
"name": "example",
"tld": "com",
"description": "example",
"registered": false,
"checked_at": "2026-08-27T12:00:00Z",
"has_mx": false,
"infrastructure": {}
}
],
"checked_at": "2026-08-27T12:00:00Z",
"name": "example",
"tld": "com",
"protection_score": {
"score": 85,
"grade": "A",
"interpretation": {
"score_meaning": "example",
"factors": "example",
"note": "example"
},
"vulnerabilities": [
{
"category": "example",
"count": 1,
"risk": "critical",
"description": "example"
}
],
"recommendations": [
"example"
],
"factors": {
"length_factor": 1,
"homoglyph_factor": 1,
"keyboard_factor": 1,
"tld_factor": 1
}
},
"defensive_opportunities": [
{
"domain": "example.com",
"name": "example",
"tld": "com",
"type": "omission",
"risk": "critical",
"description": "example"
}
],
"risk_breakdown": {},
"recommendations": [
"example"
],
"scan_duration_ms": 1,
"meta": {
"served_by": "example"
}
},
"estimated_risk_exposure": "minimal",
"defensive_registration_priority": {},
"monitoring_recommendations": [
"example"
],
"meta": {
"served_by": "example",
"report_duration_ms": 1
}
}
HTTP durum kodları
200OK400Hatalı İstek401Yetkisiz402Ödeme Gerekli429Çok Fazla İstek500Sunucu Hatası
GET /v1/typos/quick
GET
/v1/typos/quick
Kredi: 6
Sorgu parametreleri
| Parametre | Tür | gerekli |
|---|---|---|
| domain | string | gerekli |
| limit |
integer
Varsayılan
100
|
isteğe bağlı |
Yanıt alanları
| Alan | Tür |
|---|---|
domain |
string |
registered_typos[] |
object[] |
registered_typos[] |
object |
registered_typos[].domain |
string |
registered_typos[].type |
string |
registered_typos[].risk |
string |
registered_typos[].description |
string |
registered_typos[].classification |
object |
registered_typos[].classification.status |
string |
registered_typos[].classification.reason |
string |
registered_typos[].classification.evidence |
object |
registered_typos[].classification.evidence.source |
string |
registered_typos[].classification.evidence.method |
string |
registered_typos[].classification.evidence.observed_at |
string |
registered_typos[].classification.evidence.detail |
string |
registered_typos[].classification.checked_at |
string |
count |
integer |
threat_level |
string |
coverage |
object |
coverage.requested |
integer |
coverage.definitive |
integer |
coverage.unknown |
integer |
coverage.omitted |
integer |
checked_at |
string |
scan_duration_ms |
integer |
meta |
object |
meta.served_by |
string |
Örnek istek
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/typos/quick?domain=example.com&limit=25"const response = await fetch("https://domscan.net/v1/typos/quick?domain=example.com&limit=25", {
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/typos/quick?domain=example.com&limit=25",
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/typos/quick?domain=example.com&limit=25", 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/typos/quick?domain=example.com&limit=25")
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))Örnek yanıt
{
"domain": "example.com",
"registered_typos": [
{
"domain": "xeample.com",
"type": "transposition",
"risk": "high",
"description": "Swapped 'e' and 'x'"
},
{
"domain": "example.net",
"type": "tld-swap",
"risk": "medium",
"description": "TLD changed from .com to .net"
}
],
"count": 2,
"threat_level": "high",
"coverage": {
"requested": 98,
"definitive": 92,
"unknown": 6,
"omitted": 0
},
"checked_at": "2026-10-09T10:15:30.000Z",
"scan_duration_ms": 2840,
"meta": {
"served_by": "pop=MAD country=ES"
}
}
HTTP durum kodları
200OK400Hatalı İstek401Yetkisiz402Ödeme Gerekli429Çok Fazla İstek500Sunucu Hatası