Developers
Документация API
API, возвращающая ту же детализацию комиссий, что и сайт, построчно, без скрытой маржи. Эта страница описывает соглашения, общие для всех конечных точек, и точно указывает, что открыто сегодня.
Что открыто сегодня
Конечная точка 1 фактически доступна и вызываема: котирование. Остальные 5 опубликованы как контракт, чтобы вы могли создавать интеграцию до их открытия, и каждая имеет явный значок.
Мы документируем заранее, потому что это помогает интеграции. Заставлять вас думать, что что-то подключено, было бы нечестно: каждая конечная точка указывает свой статус, а примеры ответов для открытых конечных точек — это реально полученные ответы, а не макеты.
Базовый URL и версионирование
Сосуществуют две базы: та, что отвечает сегодня, и версионированный API, который появится с выпущенными ключами.
- Сегодня
- /api Live
- Версионированный API
- /api/v1 Published contract, not open
Версия находится в пути, а не в заголовке: URL должен пережить вставку в тикет. Критическое изменение — удалённое поле, изменённый тип, другая семантика — открывает новую версию; предыдущая продолжает обслуживаться как минимум шесть месяцев, с датой её окончания, объявленной в журнале изменений. Добавление поля не является критическим: ваш клиент должен игнорировать неизвестные ему поля.
Соглашения
Они действуют для каждой конечной точки, открытой или предстоящей. Большинство из них существуют по одной причине: никогда не потерять ни цента при передаче.
Суммы — это строки или целые числа в младших единицах
Никогда не число с плавающей запятой. В JSON 0.1 + 0.2 — это не 0.3, а большая сумма теряет младшие единицы при сериализации. Поэтому суммы в основных единицах отправляются как строки, а внутренние суммы — как целые числа в младших единицах с указанием количества десятичных знаков.
{
"net": "912.28",
"currency": "EUR",
"currencyDecimals": 2
}Количество десятичных знаков зависит от валюты
У евро два десятичных знака, у франка КФА и вьетнамского донга их нет. Не зашивайте «× 100»: читайте currencyDecimals или поле decimals из справочных данных.
{ "amount": "125000", "currency": "XOF", "currencyDecimals": 0 }Суммы в криптовалюте указываются в базовых единицах
Депозит возвращается с указанием количества десятичных знаков: 8 для биткоина, 6 для USDT, 18 для эфира. Один и тот же тикер может существовать с разным количеством десятичных знаков в зависимости от сети: доверяйте полю, а не своей памяти.
{ "deposit": { "amount": "1000.000000", "ticker": "USDT", "decimals": 6 } }Метки времени
Даты указаны в формате ISO 8601 UTC. Одно намеренное исключение: rateAsOf — это метка времени Unix в миллисекундах, поскольку она используется для вычисления возраста, а не для отображения. Она содержит дату рыночных ДАННЫХ, а не вашего запроса: это различие позволяет обнаружить устаревшую цену.
{ "rateAsOf": 1788356981608, "rateSource": "coingecko" }Идентификаторы стабильны
Идентификатор актива, платёжного канала или страны никогда не меняется и не переназначается. Закрытый канал сохраняет свой идентификатор с указанием фазы и причины: ваша интеграция может увидеть, почему он исчез из ваших опций, а не обнаружить пустоту.
Сообщения для пользователей двуязычны
Причина отказа возвращается на французском и английском в одном объекте. Вы показываете ту, которая соответствует вашему пользователю, без необходимости поддерживать таблицу перевода на вашей стороне.
{ "reason": { "fr": "…", "en": "…" } }Первый вызов
Для котирования ключ не нужен. Этот вызов работает как есть.
curl -sS -X POST https://fiatside.com/api/quote \
-H 'Content-Type: application/json' \
-d '{
"assetId": "usdt",
"railId": "sepa_instant",
"networkId": "tron",
"direction": "sell",
"amount": "1000"
}'{
"deposit": { "amount": "1000.000000", "ticker": "USDT", "decimals": 6 },
"gross": "921.68",
"net": "912.28",
"currency": "EUR",
"currencyDecimals": 2,
"midRate": "0.92168430",
"effectiveRate": "0.91228000",
"totalCostBps": 102,
"lines": [
{ "code": "network", "amount": "1.11", "basis": "Cout reseau tron, preleve en USDT" },
{ "code": "spread", "amount": "8.29", "basis": "0.90 % du montant converti" }
],
"settlement": { "p50Minutes": 1, "p95Minutes": 12 },
"lockSeconds": 1800,
"rateAsOf": 1788356981608,
"rateSource": "mock",
"limitError": null
}Поле rateSource указывает, откуда взялась цена. Значение «mock» — это детерминированный источник для разработки, который не может запуститься в производстве: процесс отказывается запускаться, а не котирует замороженные цены.
Разделы
- АутентификацияКак конечная точка котировок защищена сегодня, как будут выдаваться ключи и правила обращения с производственным ключом.
- КотировкиКонечная точка котировок, её построчный разбивка комиссий, как ограничения платежных систем возвращаются в ответе и как долго курс остаётся зафиксированным после создания ордера.
- ОрдераСоздание ордера, ключ идемпотентности, адрес депозита, обязательный мемо в некоторых сетях и чтение переходов состояний.
- Справочные данныеКаталоги платежных систем, активов и стран, схема полей бенефициара, которая позволяет вам сгенерировать форму выплаты, и курсорная пагинация.
- ВебхукиОтправляемые события, подпись HMAC-SHA256 по необработанному телу, окно повторной отправки, график повторных попыток и почему проверка должна выполняться за постоянное время.
- ОшибкиКаждый код ошибки с его HTTP-статусом, что он означает точно, что делать с ним на стороне интеграции и какие из них стоит повторить.
Чего API не будет делать
Ограничения API так же полезно знать, как и его возможности.
- Никаких сторонних выплат. Имя получателя должно совпадать с проверенной личностью владельца заказа, а платёжные каналы теперь проверяют имя по счёту.
- Никакого создания аккаунта или проверки личности через API. Эти шаги выполняются в процессе, где пользователь видит, на что соглашается.
- Никаких ключей в параметрах URL. URL-адреса попадают в журналы, заголовки referrer и историю: ключ, переданный таким образом, — это ключ, который нужно отозвать.
- Никакого кэширования котировки на нашей стороне. Ответ содержит Cache-Control: no-store, и ваша интеграция не должна обходить это: кэшированная котировка — это устаревшая цена, представленная как твёрдая.
- Никакой конечной точки покупки криптовалюты. Сервис работает в одном направлении: цифровой актив в фиатную валюту.