Правила
- Суммы — строки. Например
"25.00"USDT,"0.015"BTC,"3450.12000000"для курса. Не число, а именно строка — это исключает потерю точности на 18‑значных токенах. - В единицах валюты, а не в minor‑единицах.
"25.00"— это 25 USDT, а не 25 «копеек». - Разделитель дробной части — точка. Разделителя тысяч нет.
- Число знаков после точки зависит от валюты и сети. Ориентируйтесь на каталог сетей и не обрезайте лишнее самостоятельно.
float/double.
Валюта цены и валюта расчёта
У валюты в API две разные роли — не путайте их.
Полный список валют цены —
pricing_currencies в GET /v1/currencies; список
валют расчёта — currencies там же.
Цену можно назначать в фиате — не только в долларах
Поддерживаются 23 фиатные валюты:У
JPY и KRW ноль знаков после запятой. У иены и воны нет разменной единицы: правильно
"amount": "10000", а "10000.00" — ошибка формата.KZT), сом (KGS) и сум (UZS) пока не поддерживаются — источник курсов не котирует в
них крипту напрямую. Счёт в такой валюте вернёт 400 payment.unknown_currency.
Цена в евро или рублях так же надёжна, как в долларах: курс монеты берётся сразу в нужной валюте,
одной котировкой, без перемножения двух курсов и без второго провайдера.
Расчёт всегда в крипте
Шлюз не хранит фиат: он не держит долларовых или рублёвых счетов, не принимает и не отправляет фиат. Фиатнаяcurrency — это только «ценник»: сумма пересчитывается в крипту по курсу в момент фиксации, и
дальше все деньги живут исключительно в монетах.
Из этого следуют три правила:
- Баланс мерчанта — в криптоактивах (
USDT,BTC, …), не в фиате. См./v1/balance. - Выплаты (
/v1/payout) отправляются в крипте на криптоадрес. - Возвраты (
/v1/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
Исключение: minor‑единицы
Часть полей отдаётся именно в минимальных единицах (minor units) строкой — это всегда явно оговаривается на странице метода. Примеры:POST /v1/referral/info—earnings_by_assetв minor‑единицах (для USDT 6 знаков:"18450000"= 18.45 USDT).POST /v1/auto-withdraw/*— порогmin_minorв минимальных единицах.
*_minor или на странице сказано «в минимальных единицах» — это minor‑формат,
а не единицы валюты.
Курсы
Курс валюты возвращается строкой с фиксированной точностью, например"3450.12000000". См.
POST /v1/exchange-rate/list. Курс — оценочная рыночная котировка для
отображения, а не гарантия исполнения: фактический курс платежа фиксируется в момент создания инвойса.