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

Правила

  • Суммы — строки. Например "25.00" USDT, "0.015" BTC, "3450.12000000" для курса. Не число, а именно строка — это исключает потерю точности на 18‑значных токенах.
  • В единицах валюты, а не в minor‑единицах. "25.00" — это 25 USDT, а не 25 «копеек».
  • Разделитель дробной части — точка. Разделителя тысяч нет.
  • Число знаков после точки зависит от валюты и сети. Ориентируйтесь на каталог сетей и не обрезайте лишнее самостоятельно.
Внутри шлюз считает деньги на целочисленной арифметике (big‑integer), без float. Вам тоже рекомендуется хранить суммы строками или в minor‑единицах и не пропускать их через 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) строкой — это всегда явно оговаривается на странице метода. Примеры: Если поле называется *_minor или на странице сказано «в минимальных единицах» — это minor‑формат, а не единицы валюты.

Курсы

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

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

Поддерживаемые сети и валюты

GET /v1/currencies

Курсы валют