API API d’analyse IDN et homographes
Convertissez les domaines Punycode et Unicode et détectez les caractères trompeurs. Utilisez cette référence pour choisir une opération et intégrer son contrat de réponse documenté.
Opérations
GET /v1/idn
GET
/v1/idn
Crédits: 1
Paramètres de requête
| Paramètre | Type | requis |
|---|---|---|
| domain | string | requis |
Champs de réponse
| Champ | Type |
|---|---|
input |
string |
outcome |
string |
unicode |
string |
ascii |
string |
is_idn |
boolean |
valid |
boolean |
errors[] |
string[] |
labels[] |
object[] |
labels[] |
object |
labels[].unicode |
string |
labels[].ascii |
string |
labels[].is_idn |
boolean |
labels[].scripts[] |
string[] |
labels[].mixed_script |
boolean |
labels[].has_invisible |
boolean |
labels[].confusable_characters[] |
object[] |
labels[].confusable_characters[] |
object |
labels[].confusable_characters[].char |
string |
labels[].confusable_characters[].codepoint |
string |
labels[].confusable_characters[].script |
string |
labels[].confusable_characters[].looks_like |
string |
skeleton |
string |
risk |
object |
risk.level |
string |
risk.reasons[] |
string[] |
tld |
object |
tld.label |
string |
tld.ascii |
string |
tld.is_idn |
boolean |
checked_at |
string |
caveats[] |
string[] |
Exemple de requête
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/idn?domain=xn--80ak6aa92e.com"const response = await fetch("https://domscan.net/v1/idn?domain=xn--80ak6aa92e.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/idn?domain=xn--80ak6aa92e.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/idn?domain=xn--80ak6aa92e.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/idn?domain=xn--80ak6aa92e.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))Exemple de réponse
{
"input": "xn--80ak6aa92e.com",
"outcome": "analyzed",
"unicode": "аррӏе.com",
"ascii": "xn--80ak6aa92e.com",
"is_idn": true,
"valid": true,
"errors": [],
"labels": [
{
"unicode": "аррӏе",
"ascii": "xn--80ak6aa92e",
"is_idn": true,
"scripts": [
"Cyrillic"
],
"mixed_script": false,
"has_invisible": false,
"confusable_characters": [
{
"char": "а",
"codepoint": "U+0430",
"script": "Cyrillic",
"looks_like": "a"
},
{
"char": "р",
"codepoint": "U+0440",
"script": "Cyrillic",
"looks_like": "p"
},
{
"char": "р",
"codepoint": "U+0440",
"script": "Cyrillic",
"looks_like": "p"
},
{
"char": "ӏ",
"codepoint": "U+04CF",
"script": "Cyrillic",
"looks_like": "l"
},
{
"char": "е",
"codepoint": "U+0435",
"script": "Cyrillic",
"looks_like": "e"
}
]
},
{
"unicode": "com",
"ascii": "com",
"is_idn": false,
"scripts": [
"Latin"
],
"mixed_script": false,
"has_invisible": false,
"confusable_characters": []
}
],
"skeleton": "apple.com",
"risk": {
"level": "high",
"reasons": [
"whole_script_confusable",
"idn_label"
]
},
"tld": {
"label": "com",
"ascii": "com",
"is_idn": false
},
"checked_at": "2026-10-09T10:15:30.000Z",
"caveats": [
"partial_confusable_table"
]
}
Codes de statut HTTP
200OK400Requête incorrecte401Non autorisé402Paiement requis429Trop de requêtes