> For the complete documentation index see https://domscan.net/llms.txt. Markdown versions of every docs page are available by appending .md to the page URL.

Source: https://domscan.net/ru/docs/products/idn-analysis

# API API анализа IDN и омографов

Преобразование доменов между Punycode и Unicode и поиск похожих символов. Используйте этот справочник, чтобы выбрать операцию и встроить её документированный контракт ответа.

[Открыть страницу продукта](https://domscan.net/ru/idn-homograph-api)

## Операции

GET `/v1/idn` [Открыть справочник API](https://domscan.net/ru/docs/products/idn-analysis#getIdnAnalysis)

## GET `/v1/idn`

Операция: `getIdnAnalysis`
Кредиты и аутентификация: 1
Требуется аутентификация

GET /v1/idn Кредиты: 1

#### Параметры запроса

| Параметр | Тип | обязателен |
| --- | --- | --- |
| domain | string | обязателен |

#### Поля ответа

| Поле | Тип |
| --- | --- |
| `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[] |

#### Пример запроса

```bash
curl -H "X-API-Key: $DOMSCAN_API_KEY" "https://domscan.net/v1/idn?domain=xn--80ak6aa92e.com"
```

```javascript
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);
```

```python
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())
```

```go
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))
}
```

```ruby
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))
```

#### Пример ответа

```json
{
  "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"
  ]
}
```

#### Коды состояния HTTP

- `200` OK
- `400` Неверный запрос
- `401` Не авторизован
- `402` Требуется оплата
- `429` Слишком много запросов

## Справочные материалы

[OpenAPI 3.0](https://domscan.net/v1/openapi.json)
[Postman](https://domscan.net/v1/postman.json)
[MCP](https://domscan.net/ru/mcp-domain-checker)
