Fiatside

Developers

Документація API

API, який повертає той самий детальний опис комісій, що й сайт, рядок за рядком, без прихованої маржі. Ця сторінка описує угоди, спільні для всіх кінцевих точок, і точно зазначає, що відкрито сьогодні.

Що відкрито сьогодні

Кінцева точка 1 фактично відкрита та викликається: котирування. Інші 5 опубліковані як контракт, тож ви можете створювати до їх відкриття, і кожна має явний значок.

Ми документуємо заздалегідь, бо це допомагає інтеграції. Дозволяти вам вірити, що вона підключена, було б неправильно: кожна кінцева точка зазначає свій статус, а зразкові відповіді для відкритих кінцевих точок — це фактично отримані відповіді, а не макети.

01

Базовий URL і версіонування

Співіснують дві бази: та, що відповідає сьогодні, і версіонований API, який з'явиться з виданими ключами.

Сьогодні
/api Live
Версіонований API
/api/v1 Published contract, not open

Версія міститься в шляху, а не в заголовку: URL має вижити після вставки в тікет. Розривна зміна — видалене поле, змінений тип, інша семантика — відкриває нову версію; попередня продовжує обслуговуватися щонайменше шість місяців, а її кінцева дата оголошується в журналі змін. Додавання поля не є розривним: ваш клієнт має ігнорувати поля, які він не знає.

02

Угоди

Вони діють на кожній кінцевій точці, відкритій або майбутній. Більшість із них існують з однієї причини: ніколи не втратити жодного цента під час переказу.

Суми — це рядки або цілі числа менших одиниць

Ніколи не число з плаваючою комою. У 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": "…" } }
03

Перший виклик

Для котирування ключ не потрібен. Цей виклик працює як є.

Запитbash
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"
  }'
Відповідь — реальний прикладjson
{
  "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» — це детерміноване джерело розробки, яке не може запуститися у виробництві: процес відмовляється запускатися, а не котирує заморожені ціни.

04

Розділи

05

Чого API не робитиме

Межі API так само корисно знати, як і його можливості.

  • Жодних сторонніх виплат. Ім'я отримувача має збігатися з перевіреною особою власника замовлення, а платіжні канали тепер перевіряють ім'я проти рахунку.
  • Жодного створення облікового запису або перевірки особи через API. Ці кроки відбуваються в процесі, де користувач бачить, на що погоджується.
  • Жодного ключа в параметрі URL. URL-адреси потрапляють у журнали, заголовки реферера та історію: ключ, переданий таким чином, — це ключ, який потрібно відкликати.
  • Жодного кешування котирування на нашому боці. Відповідь містить Cache-Control: no-store, і ваша інтеграція не повинна обходити це: закешоване котирування — це застаріла ціна, подана як тверда.
  • Жодної кінцевої точки для купівлі криптовалюти. Сервіс працює в одному напрямку: цифровий актив у фіатні гроші.