> ## Documentation Index
> Fetch the complete documentation index at: https://wallet-docs.iexexchanger.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Окружения

> Base URL, IP-whitelist, sandbox и продакшен, health-проверка

iEXExchanger разворачивается как **отдельный инстанс на каждого клиента** — у вашего
обменника свой сервер, свои ключи, своя БД и свой base URL. Общего публичного хоста нет.

## Base URL

Base URL выдаётся при подключении и выглядит так:

```
https://wallet.your-exchange.com
```

Все эндпоинты публичного API относительны к нему и живут под `/v1/public/*`. Например:

```
https://wallet.your-exchange.com/v1/public/deposits
https://wallet.your-exchange.com/v1/public/assets
```

<Info>
  Во всех примерах документации используется плейсхолдер
  `https://wallet.your-exchange.com`. Замените его на реальный адрес вашего инстанса.
</Info>

## Sandbox и продакшен

Sandbox (тестовый инстанс) — это отдельный сервер со **своим** base URL и **своей** парой
ключей. Это не флаг и не отдельный путь внутри продакшена.

| Параметр                | Sandbox                                                      | Продакшен         |
| ----------------------- | ------------------------------------------------------------ | ----------------- |
| Base URL                | отдельный хост (например `wallet-sandbox.your-exchange.com`) | боевой хост       |
| `api_id` / `api_secret` | свои, не пересекаются с продакшеном                          | боевые            |
| Сети                    | как настроено на инстансе (обычно testnet)                   | mainnet           |
| Деньги                  | тестовые средства                                            | реальные средства |

<Warning>
  Ключи sandbox и продакшена не взаимозаменяемы. Запрос с sandbox-ключом на продакшен-хост
  (и наоборот) вернёт `UNAUTHORIZED`. Храните их раздельно.
</Warning>

Рекомендуемый порядок: пройдите полный цикл (депозит, выплата, приём webhook) на sandbox,
затем переключите base URL и ключи на продакшен — код менять не нужно.

## IP-whitelist

Для сайта может быть задан белый список IP-адресов. Если он непустой, запросы к
`/v1/public/*` принимаются **только** с этих адресов; иначе сервер вернёт `403`
с кодом `IP_NOT_WHITELISTED`.

* Whitelist управляется в личном кабинете.
* В список добавляйте исходящие IP **вашего сервера**, с которого CMS обращается к API
  (не IP конечного пользователя).
* Если за инстансом стоит прокси/балансировщик, убедитесь, что он корректно
  пробрасывает реальный IP клиента.

<Note>
  IP-whitelist — это дополнительный слой защиты поверх подписи запроса. Он не заменяет
  HMAC-подпись: подписывать запросы нужно в любом случае. См.
  [Аутентификация](/authentication).
</Note>

## Health-проверка

У инстанса есть публичный liveness-эндпоинт — он отвечает «процесс жив и принимает HTTP».
Эндпоинт **не требует подписи** и не ходит в БД/Redis, поэтому подходит для healthcheck'ов
балансировщика или uptime-мониторинга.

```bash cURL theme={null}
curl https://wallet.your-exchange.com/health
```

```json 200 OK theme={null}
{ "ok": true }
```

<Warning>
  `/health` находится в корне (`/health`), а не под `/v1/public/`. Это **liveness**, а не
  readiness: ответ `{ "ok": true }` означает, что HTTP-сервер поднят, но не гарантирует
  готовность зависимостей (БД, очереди). Глубокую диагностику смотрит инструмент мониторинга
  в личном кабинете.
</Warning>

## Справочники инстанса

Какие именно валюты, сети и балансы доступны — зависит от настроек конкретного инстанса.
Не хардкодьте эти данные, читайте их через API:

<CardGroup cols={2}>
  <Card title="Валюты и сети" icon="coins" href="/currencies">
    `GET /v1/public/assets`, `GET /v1/public/networks`, `GET /v1/public/balances` —
    полные таблицы полей и примеры.
  </Card>

  <Card title="Аутентификация" icon="key" href="/authentication">
    Подпись запросов и заголовки.
  </Card>
</CardGroup>

## Частые вопросы

<AccordionGroup>
  <Accordion title="Можно ли тестировать на продакшене?">
    Не рекомендуется — на продакшене операции работают с реальными средствами. Используйте
    отдельный sandbox-инстанс с тестовыми ключами и testnet-сетями.
  </Accordion>

  <Accordion title="Получаю IP_NOT_WHITELISTED, хотя ключ верный.">
    IP вашего сервера не входит в белый список сайта. Проверьте исходящий IP сервера, с
    которого идёт запрос, и добавьте его в whitelist в личном кабинете. Если в цепочке есть
    прокси, убедитесь, что он передаёт реальный IP.
  </Accordion>

  <Accordion title="Healthcheck падает с 401.">
    Вероятно, вы проверяете эндпоинт под авторизацией. Для healthcheck используйте публичный
    `GET /health` (без подписи) — он отвечает `{ "ok": true }`.
  </Accordion>
</AccordionGroup>
