> ## Documentation Index
> Fetch the complete documentation index at: https://oblodai.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Переход с Heleket на Oblodai

<Note>
  **Не мигрируете с Heleket?** Смело пропускайте эту страницу — здесь только отличия при переносе
  существующей интеграции с Heleket, а не общие правила Oblodai.
</Note>

Oblodai намеренно держит совместимость с Heleket в ряде мест (например, укрупнённые статусы выплат),
но некоторые вещи отличаются. Эта инструкция собирает отличия, о которых важно знать при переносе
интеграции.

<Note>
  Список отличий основан на явно задокументированных расхождениях. Всегда сверяйтесь с актуальным
  [Справочником](/reference/overview) по каждому методу.
</Note>

***

## Аутентификация

Oblodai подписывает **каждый** запрос HMAC‑SHA256 по канонической строке
`timestamp\nMETHOD\npath\nbody` и тремя заголовками `X-Public-Id` / `X-Timestamp` / `X-Signature`.
Проверьте, что ваша реализация подписи собирает строку именно так и подписывает **те же байты**, что
отправляет. → [Как подписать запрос](/guides/signing-requests)

***

## Курсы валют

Метод: `GET /v1/exchange-rate/{currency}/list` → **`POST /v1/exchange-rate/list`**

|             | Heleket | Oblodai                                       |
| ----------- | ------- | --------------------------------------------- |
| Котировка к | USD     | **USDT**                                      |
| Фильтр      | в пути  | тело `{ "currency_from": "…" }` (опционально) |

Неизвестная валюта возвращает пустой `result: []`, а не ошибку. →
[`POST /v1/exchange-rate/list`](/reference/exchange-rate-list)

***

## Формат ответа

Все ответы (кроме [`/v1/webhooks`](/reference/webhooks-register) и `429` — он отдаёт особое тело `{ "state": 1, "message": … }` без объекта `error`) — конверт
`{ "state": 0, "result": … }` при успехе или `{ "error": { "code", "message" } }` при ошибке.
Ветвитесь по `error.code` вида `<домен>.<причина>`. →
[Формат ответа и коды ошибок](/reference/basics-errors)

**Исключение:** [`POST /v1/webhooks`](/reference/webhooks-register) отвечает `201 Created` без
конверта.

***

## Статусы выплат

Внутренний жизненный цикл выплаты — `pending → approved → sent → confirmed` (либо `failed`/
`cancelled`), но в поле `status` приходит **укрупнённый Heleket‑совместимый** статус:

| `status` в ответе | Значение                         |
| ----------------- | -------------------------------- |
| `check`           | создана, ждёт одобрения          |
| `process`         | одобрена/отправляется/отправлена |
| `paid`            | подтверждена                     |
| `fail`            | отклонена/не удалась             |
| `cancel`          | отменена                         |

Здесь совместимость сохранена — но проверьте, что вы не полагаетесь на внутренние промежуточные
статусы. → [Объект выплаты](/reference/payout-object)

***

## Подпись вебхуков

Убедитесь, что проверка подписи вебхука использует алгоритм Oblodai: `hex(HMAC-SHA256(secret,
"{timestamp}." + сырое_тело))`, где секрет — из [`/v1/webhooks`](/reference/webhooks-register).
Это **не** тот же алгоритм, что подпись запроса. → [Объект вебхука](/reference/webhook-object)

***

## Поддерживаемые сети — чего нет

Проверьте, что вы не шлёте в Oblodai сети, которых здесь нет:

* **Bitcoin‑семейство — только `BTC`.** `litecoin`, `dogecoin`, `bitcoincash`, `dash` намеренно
  **не поддерживаются** (как и `monero`) — инвойс/кошелёк на такую сеть будет отклонён.
* **Нативный ETH — только на `ethereum`.** На L2 (`base`, `arbitrum`) — только токены USDT/USDC.
* **AVAX / `avalanche` поддерживается** (нативный на C‑Chain).

Полная таблица — [Поддерживаемые сети и валюты](/reference/basics-networks). Сверяйтесь
программно через [`/v1/payment/services`](/reference/payment-services) и
[`/v1/payout/services`](/reference/payout-services).

***

## Суммы

Суммы — **строки в единицах валюты** (`"25.00"`), без float. Часть полей — в **minor‑единицах**
(например `earnings_by_asset`, `min_minor`); это всегда оговорено на странице метода. →
[Форматы сумм и денег](/reference/basics-money)

***

## Чего в публичном API нет

* **Ротация ключа** — только в личном кабинете под 2FA, не по API.
* **Вывод из личного кошелька** — только в кабинете под 2FA; по API доступен лишь ввод в личный
  кошелёк.

→ [Безопасность в проде](/guides/production-security)

***

## Мини‑чек‑лист миграции

* Подпись запроса пересобрана под формат Oblodai и совпадает байт‑в‑байт с телом.
* Курсы переведены на `POST /v1/exchange-rate/list`, учтено, что котировка к USDT.
* Разбор ответов идёт через конверт `state`/`result` и `error.code`; учтено исключение `/v1/webhooks`.
* Проверка подписи вебхука переведена на алгоритм Oblodai (timestamp + `.` + сырое тело).
* Из кода убраны неподдерживаемые сети (LTC/DOGE/BCH/DASH/XMR; нативный ETH на L2).
* Обработка `order_id`‑идемпотентности сохранена для платежей и выплат (для выплат `order_id`
  обязателен), и **дополнительно** отправляется HTTP‑заголовок `Idempotency-Key` — одно значение на
  действие, неизменное во всех ретраях. → [Идемпотентность](/reference/basics-idempotency)
* `409` **не** трактуется как «финал»: `payout.funds_maturing` и `idempotency.in_progress` надо
  повторять позже. → [Устойчивый клиент](/guides/resilient-client#не-все-409-финальны)

***

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

<CardGroup cols={2}>
  <Card title="Справочник" href="/reference/overview" icon="arrow-right" horizontal />

  <Card title="Как подписать запрос" href="/guides/signing-requests" icon="arrow-right" horizontal />

  <Card title="Объект вебхука" href="/reference/webhook-object" icon="arrow-right" horizontal />

  <Card title="Поддерживаемые сети и валюты" href="/reference/basics-networks" icon="arrow-right" horizontal />
</CardGroup>
