> For the complete documentation index, see [llms.txt](https://docs.ipcheck.ing/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ipcheck.ing/developer/ru/configuration/optional-api-keys.md).

# Необязательные API-ключи

Необязательные ключи API сторонних сервисов и функции, которые открывает каждый из них.

Ни один из ключей на этой странице не является обязательным. MyIP запускается и обслуживает трафик вообще без единого из них. Каждый ключ просто включает ещё одну возможность.

Шаблон всегда один и тот же:

1. Вы задаёте переменную окружения и перезапускаете бэкенд.
2. Бэкенд выдаёт **булево значение** (никогда само значение) для этой переменной через `GET /api/configs`.
3. Фронтенд считывает эти булевы значения и показывает, скрывает или отключает соответствующий интерфейс.

{% hint style="info" %}
`/api/configs` всегда возвращает только `true` / `false` для ключа. Его единственное строковое поле, `bulkLookupSource`, задаёт источник данных Bulk IP Lookup, а не секрет. Ваши ключи остаются на сервере и никогда не отправляются в браузер.
{% endhint %}

## Сводка

| Переменная окружения                                   | Открывает доступ к                                                                                                                                                                                 | Стоимость                                        |
| ------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
| `IPINFO_API_KEY`                                       | IPinfo.io как выбираемый источник IP-геолокации                                                                                                                                                    | Доступен бесплатный тариф                        |
| `IPAPIIS_API_KEY`                                      | IPAPI.is как выбираемый источник IP-геолокации                                                                                                                                                     | См. цены провайдера                              |
| `IP2LOCATION_API_KEY`                                  | IP2Location.io как выбираемый источник IP-геолокации                                                                                                                                               | Доступен бесплатный тариф                        |
| `GOOGLE_MAP_API_KEY`                                   | Кнопка карты на карточках сведений об IP (Google Static Maps)                                                                                                                                      | Учётная запись Google Cloud с включённой оплатой |
| `CLOUDFLARE_API_KEY`                                   | Панель ASN Info (Cloudflare Radar), инструмент ASN Profile, тепловая карта онлайн-активности по странам, лента сбоев Earth Online — и, вместе с двумя пунктами ниже, отчёты с возможностью шаринга | Бесплатная учётная запись Cloudflare             |
| `CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_KV_NAMESPACE_ID` | Диагностические отчёты с возможностью шаринга, хранящиеся в Workers KV                                                                                                                             | Бесплатная учётная запись Cloudflare             |
| `RIPESTAT_SOURCE_APP`                                  | Это не ключ — он идентифицирует ваше развёртывание для RIPEstat                                                                                                                                    | Бесплатно, без регистрации                       |

{% hint style="warning" %}
`/api/configs` может кэшироваться на edge в течение одного часа. После добавления ключа и перезапуска CDN или браузер может продолжать отдавать старые флаги функций до часа. Сделайте жёсткое обновление или очистите кэш, если новая функция не появляется.
{% endhint %}

## Источники IP-геолокации

MyIP может обращаться к нескольким IP-базам данных. Пользователь выбирает активную в **Настройки**. Источники, у которых отсутствует ключ, отображаются зачёркнутыми и не могут быть выбраны; если ранее сохранённый выбор лишается своего ключа, он автоматически переносится на ближайший доступный источник с уведомлением.

Три источника доступны только при наличии ключа: IPinfo.io, IPAPI.is и IP2Location.io. Остальным (IP-API.com, IP.sb, MaxMind) ключ не нужен — см. [Настройка MaxMind](/developer/ru/getting-started/maxmind-setup.md) и [Источники данных IP](/developer/ru/architecture/ip-data-sources.md).

### IPinfo.io — `IPINFO_API_KEY`

* **Открывает доступ к**: `IPinfo.io` в выборе источника IP, обслуживаемом `GET /api/ipinfo`.
* **Без него**: источник отключён в списке выбора. (Сам конечный пункт откатывается на запрос без токена, но интерфейс не предложит его.)
* **Где его взять**: зарегистрируйтесь на [ipinfo.io](https://ipinfo.io/) и скопируйте токен доступа из панели управления.

{% hint style="info" %}
Старое написание `IPINFO_API_TOKEN` по-прежнему читается как запасной вариант, поэтому старые развёртывания продолжают работать после обновления. Новым установкам следует использовать `IPINFO_API_KEY`.
{% endhint %}

### IPAPI.is — `IPAPIIS_API_KEY`

* **Открывает доступ к**: `IPAPI.is` в выборе источника IP, обслуживаемом `GET /api/ipapiis`. Этот источник также возвращает флаги хостинга / прокси.
* **Без него**: источник отключён в списке выбора. Прямой вызов конечной точки возвращает 500.
* **Где его взять**: зарегистрируйтесь на [ipapi.is](https://ipapi.is/).

### IP2Location.io — `IP2LOCATION_API_KEY`

* **Открывает доступ к**: `IP2Location.io` в выборе источника IP, обслуживаемом `GET /api/ip2location`.
* **Без него**: источник отключён в списке выбора. Прямой вызов конечной точки возвращает 500.
* **Где его взять**: зарегистрируйтесь на [ip2location.io](https://www.ip2location.io/).

{% hint style="success" %}
**Смена ключей встроена.** `IPINFO_API_KEY`, `IPAPIIS_API_KEY`, `IP2LOCATION_API_KEY` и `GOOGLE_MAP_API_KEY` все принимают **список, разделённый запятыми**. Для каждого запроса случайным образом выбирается один ключ, что распределяет нагрузку между несколькими бесплатными учётными записями.

```bash
IPINFO_API_KEY="token_one,token_two,token_three"
```

{% endhint %}

## Google Maps — `GOOGLE_MAP_API_KEY`

* **Открывает доступ к**: кнопка карты на карточке сведений об IP. Она открывает статическую карту, центрированную по координатам IP, обслуживаемую `GET /api/map`, с отдельным стилем для тёмной темы.
* **Без него**: кнопка карты никогда не отображается. Всё остальное на карточке не затрагивается.
* **Где его взять**: консоль Google Cloud → включите **Maps Static API** → создайте API-ключ. Требуется проект Google Cloud с включённой оплатой.

{% hint style="warning" %}
Ограничьте ключ в Google Cloud (по API и, где возможно, по IP) прежде чем размещать его на публичном экземпляре. Бэкенд проксирует изображение, поэтому ключ никогда не попадает к посетителям — но утечка ключа на стороне сервера всё равно несёт риск списаний.
{% endhint %}

## Cloudflare Radar — `CLOUDFLARE_API_KEY`

* **Открывает доступ к**: четыре представления одного `GET /api/cfradar` маршрута и инструмента, построенного на их основе.  **ASN Info** кнопка в блоке ASN на карточке сведений об IP (`?view=asn`): панель показывает название ASN, страну, организацию и оценочное число пользователей; среднее качество соединения (скорость загрузки / отдачи, задержку, джиттер), агрегированное по тестам скорости Cloudflare, выполненным для этого ASN; а также 7-дневное распределение трафика — IPv4 против IPv6, HTTP против HTTPS, desktop против mobile, bot против human.  **ASN Profile** инструмент в разделе Advanced Tools (`/tools/asn`, также доступный из панели ASN Info): одна страница на каждый номер AS, объединяющая эту сводку Radar, объявленные префиксы и их географический охват по странам (`?view=bgp-prefixes`), топологию CAIDA и списки соседей, регистрационную запись RDAP, запись CAIDA AS Rank и запись сети в PeeringDB — всё это обслуживается `GET /api/asn-profile`.  **тепловая карта онлайн-активности по странам** на карточке сведений об IP (`?view=country-traffic`) — сетка 7×24 часа недели, построенная на основе 28 дней почасового временного ряда HTTP-запросов Radar, по умолчанию показывающая вероятно человеческий трафик с переключателем на весь трафик. И  **Earth Online** глобальная лента сбоев (`?view=outages`) — этого достаточно, чтобы сама по себе показать пункт навигации панели; на форках без бэкенда pulse beacon — только лента сбоев. См. [Функции, привязанные к IPCheck.ing](/developer/ru/configuration/features-tied-to-ipcheck-ing.md).
* **Без него**: кнопка ASN Info скрыта, инструмент ASN Profile не указан ни в карточках Advanced Tools (в группе Lookup & Calculation), ни в навигации, точка входа тепловой карты по странам никогда не появляется (все три скрыты за одним и тем же `cloudFlare` флагом в `/api/configs`), а лента сбоев остаётся выключенной — на форке без бэкенда pulse beacon панель Earth Online вообще не появляется. Набор данных PeeringDB тоже не загружается, поскольку его использует только ASN Profile. Две соседние кнопки —  **ASN History** и **ASN Connectivity** — продолжают работать: они работают на RIPEstat и локальных снимках CAIDA, а не на Cloudflare. То же касается поиска AS-номера в инструменте Whois, который обращается к RDAP-серверам регистраторов.
* **Где его взять**: панель Cloudflare → **Мой профиль → Токены API → Создать токен**. Токену нужен доступ на чтение к Radar.

{% hint style="info" %}
Старое написание `CLOUDFLARE_API` по-прежнему читается как запасной вариант.
{% endhint %}

Данные Radar для панели ASN Info загружаются шестью независимыми сегментами. Если некоторые из них не удаются, панель деградирует по полям, а не падает с ошибкой — у небольших или частных ASN вполне может не быть данных о трафике. Панель не содержит счётчиков префиксов или связей; они находятся в ASN Profile. ASN Profile деградирует таким же образом на уровень выше — у каждого источника свой собственный дедлайн, и отказ одного оставляет пустым только его раздел (см. [API Endpoints](/developer/ru/reference/api-endpoints.md#api-asn-profile)). Тепловая карта по странам устроена иначе: один запрос на страну, который либо возвращает матрицу, либо валидный, пригодный для кэширования `trafficMatrix: null`.

## Отчёты с возможностью шаринга — `CLOUDFLARE_ACCOUNT_ID` + `CLOUDFLARE_KV_NAMESPACE_ID`

MyIP может превратить диагностический запуск в ссылку для шаринга, основанную на Cloudflare Workers KV.

* **Открывает доступ к**: `POST /api/report` (запись) и `GET /api/report/:id` (чтение), а также опцию ссылки для шаринга в диалоге отчёта и страницу отчёта только для чтения.
* **Требует всех трёх:**: `CLOUDFLARE_API_KEY`, `CLOUDFLARE_ACCOUNT_ID`, `CLOUDFLARE_KV_NAMESPACE_ID`. Пропустите любой из них, и функция останется выключенной.
* **Без них**: оба конечных пункта отвечают `503`, `/api/configs` сообщает `reportSharing: false`, а интерфейс шаринга так и не появляется. Пользователи по-прежнему могут копировать отчёт как Markdown или скачать его как JSON.

<details>

<summary>Настройка</summary>

1. Панель Cloudflare → **Workers & Pages → KV** → создайте пространство имён.
2. Скопируйте **шестнадцатеричный ID** — не его имя. `CLOUDFLARE_KV_NAMESPACE_ID` ожидает ID.
3. Скопируйте ваш **ID аккаунта** из панели управления в `CLOUDFLARE_ACCOUNT_ID`.
4. Убедитесь, что токен в `CLOUDFLARE_API_KEY` также имеет **Workers KV Storage: редактирование** разрешение. Один и тот же токен используется и для Radar, и для KV.

</details>

Как ведут себя сохранённые отчёты:

* Тело отчёта проверяется по строгому белому списку схем — произвольный текст сохранить нельзя.
* ID отчётов — это 16 случайных байт, закодированных base64url (22 символа), поэтому ссылки невозможно угадать.
* Каждый отчёт записывается с TTL и сам истекает из KV. Просроченные ID отвечают `404`.
* Отчёты никогда не кэшируются на edge ни при чтении, ни при записи.

{% hint style="warning" %}
У конечных точек отчётов есть **отдельного ограничения по частоте**. На публичном экземпляре прикройте их глобальным ограничителем (см. [Параметры безопасности](/developer/ru/configuration/security-options.md)) или edge-правилами.
{% endhint %}

## RIPEstat — `RIPESTAT_SOURCE_APP`

Это не API-ключ и не требует учётной записи. RIPEstat просит клиентов идентифицировать себя через `sourceapp` параметр; эту переменную он задаёт. По умолчанию `myip`.

Установите значение, которое идентифицирует ваше развёртывание (например `myip-yourdomain`) — тогда ваш трафик будет различим, если RIPE когда-нибудь понадобится связаться с вами по этому поводу.

RIPEstat обеспечивает ASN History и запасной вариант имени организации, используемый ASN Connectivity. Оба работают независимо от того, задана эта переменная или нет.

## Вещи, которые не требуют настройки

* **Звёзды GitHub** (`GET /api/github-stars`) вызывает публичный REST API GitHub без аутентификации и кэшируется на edge на сутки. Никакого токена задавать не нужно.
* **ASN Connectivity** работает на локальных снимках CAIDA, а RIPEstat используется лишь как запасной вариант для отсутствующих названий организаций.
* **Whois для AS-номеров** (`AS13335` в инструменте Whois) обращается к публичному RDAP-серверу соответствующего регистратора, найденному через bootstrap-файл RDAP от IANA. Никакой учётной записи, никакого ключа.
* **Массовый поиск IP** (`POST /api/bulk-lookup`) отвечает из тех же локальных баз данных MaxMind GeoLite2, что и `/api/maxmind`, поэтому ему ничего не нужно, кроме [Настройка MaxMind](/developer/ru/getting-started/maxmind-setup.md) — никакого дополнительного ключа и никакой квоты у upstream на IP, которую можно было бы тратить.
* **Поиск MAC-адреса** (`GET /api/macchecker`) отвечает из локальных копий реестров IEEE MAC, загружаемых при запуске и обновляемых ежедневно. Никакой учётной записи, никакого ключа — см. [Источники данных IP](/developer/ru/architecture/ip-data-sources.md#ieee-mac-registries).
* **CAIDA AS Rank**, один из источников ASN Profile, — это бесплатный публичный API, которому не нужен ключ — но сам ASN Profile указан только с `CLOUDFLARE_API_KEY`.

## Задание переменных

{% tabs %}
{% tab title="Node (.env)" %}
{% code title=".env" %}

```bash
IPINFO_API_KEY="your-ipinfo-token"
IPAPIIS_API_KEY="your-ipapi-is-key"
IP2LOCATION_API_KEY="your-ip2location-key"
GOOGLE_MAP_API_KEY="your-google-maps-key"
CLOUDFLARE_API_KEY="your-cloudflare-token"
CLOUDFLARE_ACCOUNT_ID="your-account-id"
CLOUDFLARE_KV_NAMESPACE_ID="your-namespace-hex-id"
RIPESTAT_SOURCE_APP="myip-yourdomain"
```

{% endcode %}

После этого перезапустите бэкенд. См. [Развертывание с Node.js](/developer/ru/getting-started/deploy-with-nodejs.md).
{% endtab %}

{% tab title="Docker" %}

```bash
docker run -d -p 18966:18966 \\
  -e IPINFO_API_KEY="your-ipinfo-token" \
  -e GOOGLE_MAP_API_KEY="your-google-maps-key" \
  -e CLOUDFLARE_API_KEY="your-cloudflare-token" \
  -e CLOUDFLARE_ACCOUNT_ID="your-account-id" \
  -e CLOUDFLARE_KV_NAMESPACE_ID="your-namespace-hex-id" \
  -e RIPESTAT_SOURCE_APP="myip-yourdomain" \
  --name myip \
  jason5ng32/myip:latest
```

Каждая переменная на этой странице читается во время выполнения, так что `docker run -e` этого достаточно — перестраивать не нужно. См. [Развёртывание с Docker](/developer/ru/getting-started/deploy-with-docker.md).
{% endtab %}
{% endtabs %}

## Связанные страницы

* [Переменные окружения](/developer/ru/reference/environment-variables.md) — полный список, включая обязательные
* [Функции, привязанные к IPCheck.ing](/developer/ru/configuration/features-tied-to-ipcheck-ing.md) — возможности, зависящие от закрытых сервисов
* [API Endpoints](/developer/ru/reference/api-endpoints.md) — что возвращает каждый маршрут
* [Параметры безопасности](/developer/ru/configuration/security-options.md) — не давайте посторонним сжечь вашу квоту


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.ipcheck.ing/developer/ru/configuration/optional-api-keys.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
