Базовий URL:
https://api.fonproxy.io
Аутентифікація
Всі захищені кінцеві точки вимагають API-ключ:
| Метод | Header/Параметр | Приклад |
|---|---|---|
| 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). - Користувачі, що ввійшли в систему: якщо значення в заголовку відрізняється від збереженої локалі, бекенд автоматично оновлює локаль користувача в базі даних (fire-and-forget, додаткового запиту не потрібно).
- Підтримувані локалі:
en(Англійська, за замовчуванням),uk(Українська). - Отримайте поточний список локалей під час виконання програми:
GET /locales - Запасний варіант: якщо заголовок відсутній або локаль невідома, використовується
en.
Що Перекладається
| Канал | Перекладає | Як |
|---|---|---|
| Електронні листи (теми, тіло) | Бекенд | Перекладаються до рендерингу в HTML |
| Сповіщення Telegram | Бекенд | Перекладаються перед відправленням |
| Повідомлення про помилки API | Фронтенд | Бекенд повертає сирі ключі (наприклад, order.not_found), фронтенд перекладає |
| Сповіщення в програмі | Фронтенд | Бекенд зберігає сирі ключі в базі даних, фронтенд рендерить |
Поле locale завжди повертається в профілі користувача (GET /user/me), щоб фронтенд міг відповідно ініціалізувати свою i18n.
Загальні Заголовки
| Заголовок | Обов'язково | Опис |
|---|---|---|
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 |