> ## 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.

# Песочница

> Тестируйте интеграцию без реальных средств: эмуляция входящих транзакций и исходов выплат, настоящие вебхуки

**Новое в 1.4.0**

Песочница — режим **сайта** (не отдельный сервер): оператор включает его в админке
(Сайт → «Изменить» → «Интеграция» → *Песочница*). После этого:

* депозиты и выплаты сайта **не выходят в сеть** — адреса генерируются, но мониторинг чейна и broadcast
  для них отключены;
* входящие транзакции и исходы выплат вы **эмулируете** двумя вызовами Public API (ниже);
* всё остальное штатное: статусы, окно доплаты, допуск недоплаты, лимиты и одобрение выплат,
  возвраты, **настоящие вебхуки** с тем же контрактом и подписью — плюс поле `sandbox: true` в теле
  и заголовок `X-Sandbox: true` в каждом ответе Public API сайта.

<Tip>
  Заведите два сайта — боевой и sandbox — с разными API-ключами. CMS переключается только ключами.
</Tip>

## Эмулировать входящую транзакцию

```
POST /v1/public/sandbox/deposits/{uuid}/pay
```

`uuid` — депозита (из `POST /v1/public/deposits`) или статического адреса (каждый вызов — отдельный платёж).

<ParamField body="amount" type="string">Сумма «пришедшей» транзакции. По умолчанию — ожидаемая сумма депозита. Больше — `paid_over`, меньше — `wrong_amount` (или ожидание доплаты, если она включена).</ParamField>
<ParamField body="fromAddress" type="string">Адрес отправителя в эмулируемой транзакции (по умолчанию `sandbox`). Полезно для проверки возвратов.</ParamField>
<ParamField body="confirmations" type="integer">Подтверждений на момент детекции. По умолчанию — порог финализации: депозит сразу `paid`. Меньше порога — депозит останется в `process` (`deposit.tx_detected`), финализация придёт автоматически через \~30 секунд.</ParamField>

```json Ответ 200 theme={null}
{ "ok": true, "data": { "uuid": "…", "txhash": "sandbox:…:1757…", "amount": "100", "confirmations": 19, "requiredConfirmations": 19 } }
```

Синтетический `txhash` начинается с `sandbox:` и в сети не существует; `explorerTxUrl` для него бессмысленен.

## Задать исход выплаты

```
POST /v1/public/sandbox/payouts/{uuid}/complete
```

<ParamField body="outcome" type="string" required>`confirmed` — выплата проходит `queued → signing → broadcasted → confirmed` с синтетическим `txhash`; `failed` — `failed` с причиной.</ParamField>
<ParamField body="reason" type="string">Причина для `failed`.</ParamField>

Выплата должна быть в `queued`. Если по правилам одобрения она в `pending_approval` — сначала одобрите её
в админке (четыре глаза работают и в песочнице), либо отключите одобрение для тестового сайта.
Выплата-возврат депозита завершает и сам депозит (`refund_paid` / `refund_fail`).

## Ошибки

| Код                                      | HTTP | Когда                                                  |
| ---------------------------------------- | :--: | ------------------------------------------------------ |
| `SANDBOX_ONLY`                           |  403 | сайт ключа не в режиме песочницы                       |
| `SANDBOX_PAYOUT_NOT_READY`               |  409 | выплата не в `queued` (ждёт одобрения / уже завершена) |
| `DEPOSIT_NOT_FOUND` / `PAYOUT_NOT_FOUND` |  404 | ресурс не найден или принадлежит другому сайту         |

## Что не эмулируется

Балансы hot-кошельков (`/v1/public/balances`) — реальные; комиссии сети — оценки по живым оракулам;
AML-проверки идут по реальным провайдерам (для sandbox-адресов вернут «чисто»); свип и JIT-ликвидность
пропускаются. Уведомления операторам (Telegram) приходят как обычно — используйте отдельный тестовый сайт.
