FonProxy

User API

FonProxy user endpoints: profile, settings, email change, currencies, transactions, balance graph, and avatar.

Останнє оновлення: 9 квітня 2026 р.

Для аутентифікації та спільних заголовків дивіться API General.


Користувач

Отримати поточного користувача Auth required

GET /user/me

Отримання профілю аутентифікованого користувача. @re

Відповідь

{
  "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"
  },
  "sudo": null
}

invitedBy — ID користувача, який запросив цього користувача через реферальне посилання. null, якщо не запрошено.

sudo — null для нормальної сесії. Коли адміністратор діє як цей користувач (див. POST /admin/users/:id/sudo) це { "adminName": "Alex", "expiresAt": "2026-10-12T14:54:52.636Z" }. Сесія sudo є тільки для читання: кожен запит, окрім GET/HEAD/OPTIONS, кінцевих точок для попереднього перегляду (POST /orders/preview, POST /payment/preview, POST /payment/gateways/:key/meta/options) та POST /auth/sudo/exit відхиляється з 403 auth.sudo_read_only.


Оновити налаштування Auth required

PATCH /user/settings

Оновлення налаштувань користувача. Всі поля необов'язкові — надсилайте лише те, що бажаєте змінити.

Тіло запиту

Ім'яТипОписОбов'язково
namestringВідображуване ім'я. Надішліть порожній рядок, щоб очистити.Ні
currencystringКод відображуваної валютиНі
passwordstringВстановити або змінити пароль. Якщо у користувача вже є пароль, вимагається currentPassword.Ні
currentPasswordstringНеобхідно лише при зміні існуючого пароляНі

Відповідь

Повний оновлений профіль користувача.


Запит на зміну електронної пошти Auth required

POST /user/email/request-change

Надіслати 6-значний код підтвердження на нову електронну адресу. Код діє 10 хвилин. Попередні коди, що очікують на цю саму адресу, втрачають силу.

Тіло запиту

Ім'яТипОписОбов'язково
emailstringНова електронна адресаТак

Відповідь

{ "message": "user.email_change_code_sent" }

Помилки:

{ "message": "user.email_required" }
{ "message": "user.email_already_taken" }

Підтвердити зміну електронної пошти Auth required

POST /user/email/confirm

Підтвердьте зміну електронної пошти, подавши код, який було надіслано на нову адресу. У разі успіху електронну адресу користувача буде оновлено, і повернеться повний оновлений профіль.

Тіло запиту

Ім'яТипОписОбов'язково
emailstringНова електронна адреса (має відповідати запиту)Так
codestring6-значний код підтвердженняТак

Відповідь

{ "user": { "...": "повний профіль з оновленою електронною поштою" } }

Помилки:

{ "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

Список транзакцій балансу аутентифікованого користувача (пагінація, можливість фільтрації).

Параметри запиту

Ім'яТипОписОбов'язково
pagenumberНомер сторінки. За замовчуванням 1Ні
limitnumberКількість елементів на сторінку (максимум 100). За замовчуванням 20Ні
typestringФільтр за типом: deposit, withdrawal, purchase, refund, bonus, correctionНі
statusstringФільтр за статусом: pending, completed, failed, cancelledНі
fromstringДата в форматі ISO — початок діапазону датНі
tostringДата в форматі ISO — кінець діапазону датНі
currencystringПеревизначити відображувану валюту. За замовчуванням валюта облікового запису користувачаНі

Відповідь

{
  "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

Отримати дані графіка історії балансу. Повертає загальний формат графіка.

Параметри запиту

Ім'яТипОписОбов'язково
fromstringДата в форматі ISO — початок діапазону. За замовчуванням 30 днів томуНі
tostringДата в форматі ISO — кінець діапазону. За замовчуванням заразНі
granularitystringhour, day, week, або month. За замовчуванням автоНі
currencystringПеревизначити відображувану валюту. За замовчуванням валюта облікового запису користувачаНі

Відповідь

{
  "graph": "balance_history",
  "granularity": "day",
  "from": "2026-02-14T00:00:00.000Z",
  "to": "2026-03-16T00:00:00.000Z",
  "series": [
    {
      "key": "balance",
      "label": "Баланс",
      "color": "#151515",
      "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 або email як ідентифікатор:

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": { "...": "повний оновлений профіль користувача" }
}

Видалити аватар Auth required

DELETE /user/avatar

Видалити поточний аватар.

Відповідь

{
  "user": { "...": "повний оновлений профіль користувача з avatarUrl: null" }
}