> 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-ключи

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

Паттерн всегда один и тот же:

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

{% hint style="info" %}
`/api/configs` всегда отвечает `true` / `false`. Ваши ключи остаются на сервере и никогда не отправляются в браузер.
{% 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 с включённым биллингом |
| `MAC_LOOKUP_API_KEY`                                   | Аутентифицированные запросы MAC Lookup (инструмент работает и без него)           | Доступен бесплатный тариф                   |
| `CLOUDFLARE_API_KEY`                                   | Панель ASN Info (Cloudflare Radar) — а вместе с двумя ниже — и отчёты для шаринга | Бесплатный аккаунт 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`.
* **Без него**: источник отключён в списке. (Сам endpoint откатывается к запросу без токена, но интерфейс его не предложит.)
* **Где его взять**: зарегистрируйтесь на [ipinfo.io](https://ipinfo.io/) и скопируйте access token из своей панели управления.

{% 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 Console → включите **Maps Static API** → создайте API key. Требуется проект Google Cloud с включённым биллингом.

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

## MAC Lookup — `MAC_LOOKUP_API_KEY`

* **Открывает**: аутентифицированные запросы к [maclookup.app](https://maclookup.app/) из инструмента MAC Lookup (`GET /api/macchecker`).
* **Без него**: инструмент всё равно работает. Бэкенд отправляет запрос без ключа, и к вам применяются все ограничения, которые провайдер накладывает на анонимный трафик.
* **Где его взять**: зарегистрируйтесь на [maclookup.app](https://maclookup.app/) и создайте API key.

Это единственный ключ на этой странице, который покупает пропускную способность, а не функцию.

## Cloudflare Radar — `CLOUDFLARE_API_KEY`

* **Открывает**: **ASN Info** кнопка в блоке ASN на карточке деталей IP, обслуживаемая `GET /api/cfradar`. Панель показывает имя ASN, страну, организацию и оценочное число пользователей, а также разбивку трафика за 7 дней: IPv4 против IPv6, HTTP против HTTPS, desktop против mobile, bot против human.
* **Без него**: кнопка ASN Info скрыта. Две соседние кнопки — **ASN History** и **ASN Connectivity** — продолжают работать: они используют RIPEstat и локальные снимки CAIDA, а не Cloudflare.
* **Где его взять**: Cloudflare dashboard → **My Profile → API Tokens → Create Token**. Токену нужен доступ на чтение к Radar.

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

Данные Radar извлекаются как пять независимых сегментов. Если некоторые из них не удаются, панель деградирует поле за полем вместо того, чтобы выдавать ошибку — у небольших или приватных ASN вполне может не быть данных о трафике.

## Отчёты для шаринга — `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`. Пропустите хотя бы один — и функция останется выключенной.
* **Без них**: оба endpoint'а отвечают `503`, `/api/configs` отчёты `reportSharing: false`, и интерфейс шаринга никогда не появляется. Пользователи по-прежнему могут копировать отчёт как Markdown или скачать его в JSON.

<details>

<summary>Как настроить</summary>

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

</details>

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

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

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

## RIPEstat — `RIPESTAT_SOURCE_APP`

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

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

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

## Вещи, которым не нужна конфигурация

* **Звёзды GitHub** (`GET /api/github-stars`) вызывается к публичному REST API GitHub без аутентификации и кэшируется на edge на сутки. Никакого токена задавать не нужно.
* **ASN Connectivity** работает на локальных снимках CAIDA, используя RIPEstat только как запасной вариант для отсутствующих имён организаций.

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

{% 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"
MAC_LOOKUP_API_KEY="your-maclookup-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](/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 dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

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

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
