User API
Кінцеві точки користувачів FonProxy: профіль, налаштування, зміна електронної пошти, валюти, транзакції, графік балансу та аватар.

Для автентифікації та загальних заголовків дивіться API General.
Користувач
Отримати поточного користувача Auth required
GET /user/me
Отримати профіль автентифікованого користувача.
Відповідь
{
"user": {
"id": "k5Xz9qR2Wp",
"name": "John Doe",
"displayName": "John Doe",
"email": "user@example.com",
"initials": "JD",
"avatarUrl": "/avatars/1-a3f8c2d1.jpg",
"role": "user",
"balance": 10.00,
"displayBalance": 415.20,
"currency": "UAH",
"locale": "en",
"hasPassword": true,
"invitedBy": "xK9mR2pL1w",
"createdAt": "2026-03-15T12:00:00.000Z"
}
}
invitedBy— ID користувача, який направив цього користувача через реферальне посилання.null, якщо не було направлення.
Оновити налаштування Auth required
PATCH /user/settings
Оновити налаштування користувача. Всі поля є необов'язковими — надсилайте лише те, що хочете змінити.
Тіло запиту
| Назва | Тип | Опис | Обов'язково |
|---|---|---|---|
name | string | Відображуване ім'я. Надішліть порожній рядок, щоб очистити. | Ні |
currency | string | Код відображуваної валюти | Ні |
password | string | Встановити або змінити пароль. Якщо користувач вже має пароль, currentPassword є обов'язковим. | Ні |
currentPassword | string | Вимагається лише при зміні існуючого пароля | Ні |
Відповідь
Повний оновлений профіль користувача.
Запит на зміну електронної пошти Auth required
POST /user/email/request-change
Надіслати 6-значний код підтвердження на нову електронну адресу. Код діє протягом 10 хвилин. Попередні незавершені коди для тієї ж адреси анульовані.
Тіло запиту
| Назва | Тип | Опис | Обов'язково |
|---|---|---|---|
email | string | Нова електронна адреса | Так |
Відповідь
{ "message": "user.email_change_code_sent" }Помилки:
{ "message": "user.email_required" }
{ "message": "user.email_already_taken" }Підтвердити зміну електронної пошти Auth required
POST /user/email/confirm
Підтвердити зміну електронної пошти, надіславши код, надісланий на нову адресу. У випадку успіху електронна пошта користувача оновлюється та повертається повний оновлений профіль.
Тіло запиту
| Назва | Тип | Опис | Обов'язково |
|---|---|---|---|
email | string | Нова електронна адреса (повинна співпадати із запитом) | Так |
code | string | 6-значний код підтвердження | Так |
Відповідь
{ "user": { "...": "full profile with updated email" } }Помилки:
{ "message": "user.email_change_code_invalid" }
{ "message": "user.email_already_taken" }Перелік валют Auth required
GET /user/currencies
Отримати всі підтримувані коди відображуваних валют.
Відповідь
{
"currencies": ["USD", "EUR", "GBP", "PLN", "CZK", "HUF", "RON", "SEK", "NOK", "DKK", "CHF", "HRK", "BGN", "UAH", "TRY"]
}Перелік транзакцій Auth required
GET /user/transactions
Отримати список транзакцій балансу автентифікованого користувача (з пагінацією, можливістю фільтрації).
Параметри запиту
| Назва | Тип | Опис | Обов'язково |
|---|---|---|---|
page | number | Номер сторінки. За замовчуванням 1 | Ні |
limit | number | Кількість елементів на сторінці (макс. 100). За замовчуванням 20 | Ні |
type | string | Фільтрація за типом: deposit, withdrawal, purchase, refund, bonus, correction | Ні |
status | string | Фільтрація за статусом: pending, completed, failed, cancelled | Ні |
from | string | Дата початку у форматі ISO — початок діапазону | Ні |
to | string | Дата закінчення у форматі ISO — кінець діапазону | Ні |
currency | string | Перевизначити валюту відображення. За замовчуванням валюта облікового запису користувача | Ні |
Відповідь
{
"currency": "UAH",
"transactions": [
{
"id": "k5Xz9qR2Wp",
"type": "deposit",
"status": "completed",
"amount": 4100.00,
"currency": "UAH",
"balanceBefore": 0,
"balanceAfter": 4100.00,
"exchangeRate": 41.0,
"amountUsd": 100.00,
"balanceBeforeUsd": 0,
"balanceAfterUsd": 100.00,
"originalAmount": 4100,
"originalCurrency": "UAH",
"description": "Поповнення через Monobank",
"referenceType": "topup",
"referenceId": "aBcDeFgHiJ",
"receiptUrl": "https://api.fonproxy.io/receipts/k5Xz9qR2Wp",
"meta": { "gateway": "monobank", "invoiceId": "abc123" },
"createdAt": "2026-03-15T12:00:00.000Z"
},
...
],
"total": 42,
"page": 1,
"pages": 3
}Графік історії балансу Auth required
GET /user/graphs/balance
Отримати дані графіка історії балансу. Повертає універсальний формат графіка.
Параметри запиту
| Назва | Тип | Опис | Обов'язково |
|---|---|---|---|
from | string | Дата початку у форматі ISO — початок діапазону. За замовчуванням 30 днів тому | Ні |
to | string | Дата закінчення у форматі ISO — кінець діапазону. За замовчуванням зараз | Ні |
granularity | string | hour, day, week або month. За замовчуванням авто | Ні |
currency | string | Перевизначити валюту відображення. За замовчуванням валюта облікового запису користувача | Ні |
Відповідь
{
"graph": "balance_history",
"granularity": "day",
"from": "2026-02-14T00:00:00.000Z",
"to": "2026-03-16T00:00:00.000Z",
"series": [
{
"key": "balance",
"label": "Баланс",
"color": "#E6318B",
"points": [
{ "t": "2026-02-14T00:00:00.000Z", "v": 0 },
...
]
}
],
"meta": {
"currency": "UAH",
"startBalance": 0,
"endBalance": 337.15,
"startBalanceUsd": 0,
"endBalanceUsd": 8.25,
"exchangeRate": 41.0
}
}Аватар
Отримати аватар
GET /avatar/:identifier
Показати аватар користувача. Публічний — автентифікація не обов'язкова.
- Якщо користувач має
avatarUrl→302редирект - Якщо користувач не має
avatarUrl→ детермінований SVG з ініціалами
Приймає ID або електронну пошту як ідентифікатор:
GET /avatar/k5Xz9qR2Wp
GET /avatar/user@example.comЗавантажити аватар Auth required
POST /user/avatar
Завантажити нове зображення аватара.
Content-Type: multipart/form-data
Назва поля: file
Допустимі формати: JPEG, PNG, WebP, GIF
Максимальний розмір: 5 MB
Відповідь
{
"avatarUrl": "/avatars/1-a3f8c2d1.jpg",
"user": { "...": "full updated user profile" }
}Видалити аватар Auth required
DELETE /user/avatar
Видалити поточний аватар.
Відповідь
{
"user": { "...": "full updated user profile with avatarUrl: null" }
}