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

# Форматы сумм и денег

Все денежные суммы в API передаются и возвращаются как **строки в десятичном виде** в единицах самой
валюты. Никаких float, никаких «копеек» в основном формате запросов.

***

## Правила

* **Суммы — строки.** Например `"25.00"` USDT, `"0.015"` BTC, `"3450.12000000"` для курса. Не число,
  а именно строка — это исключает потерю точности на 18‑значных токенах.
* **В единицах валюты, а не в minor‑единицах.** `"25.00"` — это 25 USDT, а не 25 «копеек».
* **Разделитель дробной части — точка.** Разделителя тысяч нет.
* **Число знаков после точки зависит от валюты и сети.** Ориентируйтесь на
  [каталог сетей](/reference/basics-networks) и не обрезайте лишнее самостоятельно.

Внутри шлюз считает деньги на целочисленной арифметике (big‑integer), без float. Вам тоже
рекомендуется хранить суммы строками или в minor‑единицах и не пропускать их через `float`/`double`.

***

## Валюта цены и валюта расчёта

У валюты в API две разные роли — не путайте их.

| Поле          | Роль                                 | Что может быть                                                                  |
| ------------- | ------------------------------------ | ------------------------------------------------------------------------------- |
| `currency`    | **Валюта цены** — сколько счёт стоит | Любой из 23 фиатов (`USD`, `EUR`, `RUB`, …) или любая монета (`USDT`, `BTC`, …) |
| `to_currency` | **Валюта расчёта** — чем платят      | Только крипта; фиат невозможен                                                  |

Полный список валют цены — `pricing_currencies` в [`GET /v1/currencies`](/reference/currencies); список
валют расчёта — `currencies` там же.

### Цену можно назначать в фиате — не только в долларах

Поддерживаются **23 фиатные валюты**:

|                   | Валюты                                                                                                                                            | Знаков после запятой |
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------- |
| Обычные           | `USD`, `EUR`, `GBP`, `RUB`, `UAH`, `PLN`, `CZK`, `TRY`, `CNY`, `INR`, `BRL`, `CAD`, `AUD`, `CHF`, `AED`, `ZAR`, `MXN`, `IDR`, `THB`, `VND`, `NGN` | **2**                |
| Без дробной части | `JPY`, `KRW`                                                                                                                                      | **0**                |

<Note>
  **У `JPY` и `KRW` ноль знаков после запятой.** У иены и воны нет разменной единицы: правильно
  `"amount": "10000"`, а `"10000.00"` — ошибка формата.
</Note>

<CodeGroup>
  ```python Python theme={null}
  call("/v1/payment", {"amount": "100",   "currency": "EUR", "order_id": "o-1",
                       "to_currency": "USDT", "network": "tron"})   # 100.00 EUR → USDT по курсу
  call("/v1/payment", {"amount": "5000",  "currency": "RUB", "order_id": "o-2"})   # монету выберет покупатель
  call("/v1/payment", {"amount": "10000", "currency": "JPY", "order_id": "o-3",
                       "to_currency": "USDT", "network": "tron"})   # без копеек!
  ```

  ```js Node.js theme={null}
  // 100.00 EUR → USDT по курсу
  await call("/v1/payment", { amount: "100", currency: "EUR", order_id: "o-1",
                              to_currency: "USDT", network: "tron" });
  // монету выберет покупатель
  await call("/v1/payment", { amount: "5000", currency: "RUB", order_id: "o-2" });
  // без копеек!
  await call("/v1/payment", { amount: "10000", currency: "JPY", order_id: "o-3",
                              to_currency: "USDT", network: "tron" });
  ```
</CodeGroup>

**Тенге (`KZT`), сом (`KGS`) и сум (`UZS`) пока не поддерживаются** — источник курсов не котирует в
них крипту напрямую. Счёт в такой валюте вернёт `400 payment.unknown_currency`.

Цена в евро или рублях так же надёжна, как в долларах: курс монеты берётся **сразу в нужной валюте**,
одной котировкой, без перемножения двух курсов и без второго провайдера.

### Расчёт всегда в крипте

Шлюз не хранит фиат: он не держит долларовых или рублёвых счетов, не принимает и не отправляет фиат.
Фиатная `currency` — это только «ценник»: сумма пересчитывается в крипту по курсу в момент фиксации, и
дальше все деньги живут исключительно в монетах.

Из этого следуют три правила:

* **Баланс** мерчанта — в криптоактивах (`USDT`, `BTC`, …), не в фиате. См. [`/v1/balance`](/reference/balance).
* **Выплаты** ([`/v1/payout`](/reference/payout-create)) отправляются в крипте на криптоадрес.
* **Возвраты** ([`/v1/payment/refund`](/reference/payment-refund)) — в той монете, которая **фактически была
  получена**. Если счёт был выставлен в `EUR`, а покупатель заплатил `USDT`, вернётся `USDT` — ровно
  та монета и та сумма, что пришли. Возврат **не** пересчитывается заново по сегодняшнему курсу и не
  «выравнивается» до фиатной цены: курсовая разница между оплатой и возвратом не компенсируется.

Счёт, у которого монета расчёта ещё не выбрана покупателем (валюто‑агностичный, `is_multi: true`),
возвращать нечего — попытка вернёт `refund.nothing_to_refund`.

**Из фиата монету расчёта вывести нельзя.** Если цена в фиате и задана `network`, но не задана
`to_currency`, — `400 payment.to_currency_required`. Либо задайте `to_currency` явно, либо не
задавайте и `network` тоже: тогда монету выберет покупатель. Правило одинаково для **любого** фиата,
не только `USD`. → [`POST /v1/payment`](/reference/payment-create)

***

## Исключение: minor‑единицы

Часть полей отдаётся именно в **минимальных единицах** (minor units) строкой — это всегда явно
оговаривается на странице метода. Примеры:

* [`POST /v1/referral/info`](/reference/referral-info) — `earnings_by_asset` в minor‑единицах (для USDT
  6 знаков: `"18450000"` = 18.45 USDT).
* [`POST /v1/auto-withdraw/*`](/reference/auto-withdraw) — порог `min_minor` в минимальных единицах.

Если поле называется `*_minor` или на странице сказано «в минимальных единицах» — это minor‑формат,
а не единицы валюты.

***

## Курсы

Курс валюты возвращается строкой с фиксированной точностью, например `"3450.12000000"`. См.
[`POST /v1/exchange-rate/list`](/reference/exchange-rate-list). Курс — оценочная рыночная котировка для
отображения, а не гарантия исполнения: фактический курс платежа фиксируется в момент создания инвойса.

***

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

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

  <Card title="GET /v1/currencies" href="/reference/currencies" icon="arrow-right" horizontal />

  <Card title="Курсы валют" href="/reference/exchange-rate-list" icon="arrow-right" horizontal />
</CardGroup>
