Notifications API

Endpoints for listing, reading, and managing notification channels and preferences on FonProxy.

Updated 2026-04-17 14:57:00
Notifications API

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

Усі ідентифікатори сповіщень є ID.

Сповіщення

Переглянути список сповіщень Auth required

GET /notifications

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

НазваТипОписОбов'язково
pagenumberНомер сторінки (за замовчуванням: 1)Ні
limitnumberКількість елементів на сторінку, макс. 50 (за замовчуванням: 20)Ні
categorystringФільтр: general, auth, order, payment, supportНі

Відповідь

{
  "notifications": [
    {
      "id": "K4Xb9rPmYz",
      "type": "order_activated",
      "category": "order",
      "subject": "notification.order_activated_subject",
      "payload": {
        "subject": "notification.order_activated_subject",
        "blocks": [
          { "type": "heading", "text": "notification.order_activated_heading" },
          { "type": "text", "text": "notification.order_activated_text" },
          { "type": "divider" },
          { "type": "key_value", "label": "notification.order_activated_type", "value": "Residential Giga" },
          { "type": "key_value", "label": "notification.order_activated_quantity", "value": "10 GB" },
          { "type": "key_value", "label": "notification.order_activated_total", "value": "$5.00" },
          { "type": "divider" },
          { "type": "heading", "text": "notification.order_activated_getting_started" },
          { "type": "text", "text": "notification.order_activated_step_1" },
          { "type": "text", "text": "notification.order_activated_step_2" },
          { "type": "text", "text": "notification.order_activated_step_3" },
          { "type": "copyable", "value": "https://fonproxy.com/orders/K4Xb9rPmYz", "label": "notification.order_activated_order_link" },
          { "type": "button", "text": "notification.order_activated_view_order", "url": "https://fonproxy.com/orders/K4Xb9rPmYz" },
          { "type": "divider" },
          { "type": "muted", "text": "notification.order_activated_footer" }
        ]
      },
      "read": false,
      "createdAt": "2026-03-22T10:00:00.000Z"
    },
    ...
  ],
  "total": 1,
  "page": 1,
  "pages": 1
}

Отримати кількість непрочитаних Auth required

GET /notifications/unread-count

Відповідь

{
  "unread": 3
}

Отримати окреме сповіщення Auth required

GET /notifications/:id

Відповідь

{
  "id": "K4Xb9rPmYz",
  "type": "welcome",
  "category": "general",
  "subject": "notification.welcome_subject",
  "payload": {
    "subject": "notification.welcome_subject",
    "blocks": [
      { "type": "heading", "text": "notification.welcome_heading" },
      { "type": "text", "text": "notification.welcome_text" },
      { "type": "key_value", "label": "notification.welcome_email_label", "value": "user@example.com" },
      { "type": "divider" },
      { "type": "muted", "text": "notification.welcome_footer" }
    ]
  },
  "read": true,
  "createdAt": "2026-03-22T09:00:00.000Z"
}

Позначити сповіщення як прочитане Auth required

PATCH /notifications/:id/read

Відповідь

{
  "id": "K4Xb9rPmYz",
  "type": "welcome",
  "category": "general",
  "subject": "notification.welcome_subject",
  "payload": { "..." : "..." },
  "read": true,
  "createdAt": "2026-03-22T09:00:00.000Z"
}

Позначити всі сповіщення як прочитані Auth required

PATCH /notifications/read-all

Відповідь

{
  "success": true
}

Типи блоків сповіщень

Масив payload.blocks містить структуровані блоки контенту, які фронтенд рендерить. Кожен блок має type і специфічні поля для типу:

ТипПоляОпис
headingtextЗаголовок розділу
texttextТекст параграфа (може містити HTML для електронної пошти)
mutedtextМаленький сірий/другорядний текст
codecode, label?Великий текст у моноширинному форматі (наприклад, коди автентифікації)
copyablevalue, label?Значення, яке можна скопіювати (наприклад, проксі-сервер, URL)
buttontext, urlКнопка заклик до дії / посилання
dividerГоризонтальний розділювач
key_valuelabel, valueПара "назва: значення"

Текстові поля, що містять ключі notification.*, повинні розв'язуватися через систему перекладу на фронтенді.


Категорії сповіщень

КатегоріяОпис
generalПривітання, системні оголошення
authКоди автентифікації (тільки електронна пошта, не зберігаються в БД)
orderЗамовлення активовано, закінчується термін дії тощо
paymentПоповнення завершено, не вдалося тощо
adminАдміністративні оголошення
referralРеєстрація і доходи від рефералів
supportВідповіді та закриття заявок підтримки

Обмеження каналів

Не всі сповіщення надсилаються на всі канали:

СповіщенняemaildatabasetelegramПримітки
Код автентифікаціїБезпека: коди ніколи не зберігаються
ПривітанняУсі канали
Замовлення активованоУсі канали
Адміністративна трансляціяКанали, налаштовані адміністратором; коли канали явно встановлені адміністратором, налаштування користувача ігноруються
Реферальна реєстраціяУсі канали
Реферальний дохідУсі канали
Відповідь підтримкиУсі канали; анонімні користувачі тільки на електронну пошту
Закриття підтримкиУсі канали; анонімні користувачі тільки на електронну пошту

Параметри каналу

Користувачі можуть увімкнути або вимкнути канали сповіщень. Вимкнені канали мовчки пропускаються під час відправки.

Переглянути канали Auth required

GET /notifications/channels

Відповідь

{
  "channels": [
    {
      "name": "email",
      "label": "Email",
      "available": true,
      "userControllable": true,
      "enabled": true
    },
    {
      "name": "database",
      "label": "Вбудовані сповіщення",
      "available": true,
      "userControllable": true,
      "enabled": true
    },
    {
      "name": "telegram",
      "label": "Тelegram",
      "available": true,
      "userControllable": true,
      "enabled": true
    }
  ]
}
  • available — чи налаштований канал на сервері (наприклад, налаштування SMTP для електронної пошти).
  • enabled — чи увімкнуто канал для цього користувача.
  • userControllable — чи може користувач керувати ним (деякі системні канали можуть бути доступні лише для читання в майбутньому).

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

PATCH /notifications/channels/:channel

Параметри

НазваТипОписОбов'язково
:channelstringНазва каналу (email, database, тощо)Так

Тіло запиту

{ "enabled": false }

Відповідь

Повний оновлений список каналів (такий самий як GET /notifications/channels).


Відписка (публічна)

Кожен надісланий електронний лист містить посилання для відписки в один клік на підписці. Натискання на нього відразу вимикає канал електронної пошти для цього користувача і показує брендовану сторінку підтвердження.

Відписатися через токен

GET /notifications/unsubscribe

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

НазваТипОписОбов'язково
tokenstringAES-256-GCM зашифрований токен, що містить { userId, channel }Так

Повертає HTML-сторінку (200 на успіх, 400 при недійсному токені).

Токен генерується на стороні сервера і включається в кожен вихідний електронний лист. Пошук у бази даних не потрібен — саме шифрування діє як автентифікація.

Повторне увімкнення електронних сповіщень здійснюється з автентифікованого кінцевого ходу /notifications/channels.