API General
Основні конвенції для FonProxy API: автентифікація, заголовки, формат помилок, пагінація, ідентифікатори, валюта та обмеження швидкості.

Базовий URL:
https://api.fonproxy.io
Аутентифікація
Усі захищені кінцеві точки вимагають API ключ:
| Метод | Заголовок/Параметр | Приклад |
|---|---|---|
| API Key (header) | x-api-key: <key> | x-api-key: fnp_3eab... |
| API Key (query) | ?apikey=<key> | /api/v1/resource?apikey=fnp_3eab... |
Згенеруйте API ключ у вашому обліковому записі: API Keys.
Локаль
API використовує заголовок fp-locale для визначення мови користувача.
fp-locale: ukПоведінка
- Кожен запит: бекенд читає
fp-localeі використовує його для контенту, згенерованого на сервері (електронні листи, сповіщення Telegram). - Авторизовані користувачі: якщо значення заголовка відрізняється від збереженої локалі, бекенд автоматично оновлює локаль користувача в базі даних (асинхронно, без додаткового запиту).
- Підтримувані локалі:
en(англійська, за замовчуванням),uk(українська). - Отримати поточний список локалей під час виконання:
GET /locales - Резерв: якщо заголовок відсутній або локаль невідома, використовується
en.
Що Перекладається
| Канал | Перекладає | Як |
|---|---|---|
| Електронна пошта (теми, тіло) | Бекенд | Перекладається перед рендерингом в HTML |
| Повідомлення Telegram | Бекенд | Перекладається перед відправкою |
| Повідомлення про помилки API | Фронтенд | Бекенд повертає сирі ключі (наприклад, order.not_found), фронтенд перекладає |
| Сповіщення в додатку | Фронтенд | Бекенд зберігає сирі ключі в БД, фронтенд відображає |
Поле locale завжди повертається в профілі користувача (GET /user/me), щоб фронтенд міг відповідно ініціалізувати свою локалізацію.
Загальні Заголовки
| Заголовок | Обов'язковий | Опис |
|---|---|---|
x-api-key | Так (захищені маршрути) | API ключ для автентифікації |
fp-locale | Ні | Код локалі інтерфейсу (en, uk). Автоматично синхронізується з профілем користувача. |
Content-Type | Так (POST/PATCH) | application/json |
Формат Відповіді
Усі відповіді є в форматі JSON. Успішні відповіді повертають дані безпосередньо:
{
"user": { "id": "k5Xz9qR2Wp", "name": "John", ... }
}Відповіді на помилки:
{
"message": "order.not_found",
"path": "/orders/80-12345",
"timestamp": "2026-04-01T12:00:00.000Z"
}Поле message є ключем перекладу — фронтенд перекладає його у читабельний рядок.
| Сутність | Приклад ID | Формат |
|---|---|---|
| Користувач | k5Xz9qR2Wp | Алфавітно-цифровий |
| Замовлення | 80-472109 | X0-YYYYY (числовий) |
| API Key | QxPYVp4dy9 | Алфавітно-цифровий |
| Транзакція | aBcDeFgH | Алфавітно-цифровий |
| Поповнення | xYzAbCdE | Алфавітно-цифровий |
Пагінація
Кінцеві точки з пагінацією приймають:
| Параметр | За замовчуванням | Макс | Опис |
|---|---|---|---|
page | 1 | — | Номер сторінки (починається з 1) |
limit | 20 | 100 | Кількість елементів на сторінку |
Відповідь містить:
{
"items": [ ... ],
"total": 142,
"page": 1,
"pages": 8
}Валюта
- Усі ціни та залишки зберігаються у USD внутрішньо.
- Значення для відображення конвертуються за допомогою актуальних валютних курсів.
- Валюта відображення, що надає перевагу користувач, задається через
PATCH /user/settings { "currency": "UAH" }. - Кінцеві точки, які повертають грошові значення, включають поля
*Usdі*Display.
Обмеження Швидкості
Обмеження на IP-адресу. За замовчуванням: 60 запитів/хвилина для більшості кінцевих точок, 5/хвилина для кінцевих точок автентифікації.
Коли досягається ліміт швидкості, API повертає 429 Too Many Requests:
{ "message": "error.rate_limit" }Локалі
GET /locales
Повертає всі поточно підтримувані коди локалей з їх відображуваними назвами.
Відповідь:
{
"locales": [
{ "code": "en", "name": "English", "nativeName": "English" },
{ "code": "uk", "name": "Ukrainian", "nativeName": "Українська" }
]
}Валюта
GET /currencies
Повертає всі підтримувані коди валют. Публічний, автентифікація не потрібна.
Відповідь:
{
"currencies": ["USD", "EUR", "GBP", "PLN", "CZK", "HUF", "RON", "SEK", "NOK", "DKK", "CHF", "HRK", "BGN", "UAH", "TRY"]
}GET /currencies/rates
Повертає останні валютні курси за кодами валют. Кожне значення — "1 базова = N цільова" — з base=USD, "EUR": 0.92 означає, що 1 USD купує 0.92 EUR. Публічний, автентифікація не потрібна.
Параметри запиту
| Ім'я | Тип | Опис | Обов'язковий |
|---|---|---|---|
base | string | Код базової валюти (один з GET /currencies, нечутливий до регістру). За замовчуванням USD. | Ні |
Відповідь:
{
"base": "USD",
"rates": {
"USD": 1,
"EUR": 0.92,
"UAH": 41.2,
...
}
}Помилки:
| Статус | message | Причина |
|---|---|---|
400 | currency.invalid_base | base не є підтримуваним кодом валюти |
API Довідник
Публічний
| Сервіс | Документація |
|---|---|
| Аутентифікація (сесії) | API Auth |
| Користувач та Налаштування | API User |
| Замовлення | API Order |
| Платежі | API Payment |
| API Ключі | API Keys |
| Сповіщення | API Notifications |
| Гео (країни) | API Geo |
| Реферал | API Referral |
| Аналітика | API Analytics |
| Пошук | API Search |
| Здоров'я та Статус | API Health & Status |
Адмін
| Сервіс | Документація |
|---|---|
| Огляд адміністратора | API Admin |
| Користувачі | API Admin Users |
| Замовлення | API Admin Orders |
| Транзакції | API Admin Transactions |
| Пули | API Admin Pools |
| Джерела | API Admin Sources |
| IP-адреси | API Admin IPs |
| Пірінг | API Admin Peers |
| Сповіщення | API Admin Notifications |
| Реферали | API Admin Referrals |
| Гео | API Admin Geo |
| Відвідувачі | API Admin Visitors |
| Монітор Статусу | API Admin Status |
| Правила блокування | API Admin Block Rules |
| Переклади | API Admin Translations |