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-адреси потрапляють у журнали, заголовки реферера та історію: ключ, переданий таким чином, — це ключ, який потрібно відкликати.
- Жодного кешування котирування на нашому боці. Відповідь містить Cache-Control: no-store, і ваша інтеграція не повинна обходити це: закешоване котирування — це застаріла ціна, подана як тверда.
- Жодної кінцевої точки для купівлі криптовалюти. Сервіс працює в одному напрямку: цифровий актив у фіатні гроші.