API адмін-панелі кешбеку

API адмін-панелі кешбеку

API адмін-панелі кешбеку

ENV:

DevProd
https://admin-panel.dev.deeployalty.io/deeployalty-admin/https://admin-panel.deeployalty.io/deeployalty-admin/

Інструкція зі звірки кешбек-кампаній у порталі (звіти банку та мерчанта): звірка кешбек-кампаній.

Авторизація

Авторизація для всіх API відбувається за допомогою Bearer Token.

Як згенерувати Bearer Token

Для генерації токена використовуйте api.

Приклад:

{
  "Authorization": "Bearer {{authToken}}"
}

Зверніть увагу: токен має термін дії.


Отримання списку кешбеків

Метод: GET

Ендпоінт: /cashbacks/for-bank

Параметри: /cashbacks

ПараметрТипОбов’язковийОпис
nameintegerНіНазва кешбеку
skuarray [“string”]НіSKU товару
retailerIdstringНіID мерчанта
statusstringНіКонкретний статус кешбеку
bankApprovalStatusstringНіГрупа статусів кешбеку в банку (див. Статус банку нижче)
dateTostringНіДата початку кешбеку
dateFromstringНіДата завершення кешбеку

Статус кешбеку

Статус кешбекуОпис
activeкешбек-кампанії розпочато і вони активні
finishedкешбек-кампанії завершено
approvedучасть у кешбек-кампанії схвалено банком і мерчантом

Для інтеграції з адмін-панеллю та отримання всіх кешбек-кампаній, які дійсно схвалені банком і мерчантом і будуть активні на конкретну дату, потрібно брати статус active для всієї кампанії, а не лише active у масиві banks[].

Якщо кампанія активна і мерчант додає ще один термінал, повний список terminal id можна взяти в terminals[]. Наприклад, використовуйте сервіс, який раз на 12 годин перевіряє, чи змінилося це поле; якщо так — оновіть дані у своїй системі.

Статус банку

Статус банкуОпис
pendingкешбек-кампанія очікує рішення банку
approvedучасть у кешбек-кампанії схвалено банком
declinedучасть у кешбек-кампанії відхилено банком
expiredкешбек-кампанія завершилася або мерчант схвалив старт кампанії без цього банку

Успішна відповідь

HTTP-код: 200

Тіло відповіді:

[
  {
    "cashbackId": "228536ee-7e97-451a-9296-ed79267fe3ce",
    "retailerId": "711df0c2-209c-4e54-accf-484820e7e43f",
    "banks": [
      {
        "id": "093e6c55-638d-4982-ba41-f0f769041a33",
        "status": "pending",
        "settlementConfirmed": false
      }
    ],
    "name": "testlili1709",
    "description": "11",
    "participationTerms": "fff",
    "bannerSmall": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBzdGFuZGFsb25lPSJubyI/Pgo8IURPQ1RZUEUgc3ZnIFBVQkx...",
    "bannerBig": "",
    "sku": [],
    "categoryId": ["10", "20", "30"],
    "dateFrom": "2025-11-30T21:00:00.000Z",
    "dateTo": "2026-01-31T20:59:59.999Z",
    "minAmount": 123,
    "maxAmount": 133,
    "maxBudget": 11111,
    "percentage": 10,
    "expectedCompensation": null,
    "countryId": "a7a3362b-7560-4398-8255-6d332411ab68",
    "terminals": [
      {
        "terminal_id": "t125128",
        "terminal_name": "Main Store Terminal",
        "terminal_location": "Kyiv, Main Street 1"
      },
      {
        "terminal_id": "123",
        "terminal_name": null,
        "terminal_location": null
      }
    ],
    "terminalsDeeployalty": false,
    "paymentSystemsId": [
      "8f2485fc-1bd8-4127-8765-06b81a02ed3d",
      "de63a5d2-d67e-4c0a-a747-75f4e1212c94",
      "e9c37e42-bcd5-4120-96f0-a39d3afb5b9e",
      "271dd644-c342-4e36-afb8-25c1652917da"
    ],
    "paymentSplit": "merchant",
    "merchantCommission": null,
    "status": "awaitingBankApproval",
    "createdAt": "2025-09-17T07:16:16.768Z",
    "updatedAt": "2025-09-17T07:16:16.768Z",
    "retailer": {
      "retailerId": "711df0c2-209c-4e54-accf-484820e7e43f",
      "name": "Deeployalty"
    },
    "country": {
      "id": "a7a3362b-7560-4398-8255-6d332411ab68",
      "name": "Ukraine",
      "code": "UA",
      "currency": {
        "code": "UAH",
        "icon": "",
        "name": "Ukrainian hryvnia",
        "symbol": "₴"
      }
    }
  }
]
ПолеТипОпис
terminalsarray of objectsСписок терміналів, пов’язаних із кешбеком
terminals[].terminal_idstringІдентифікатор терміналу
terminals[].terminal_namestring | nullНазва терміналу (null, якщо недоступна)
terminals[].terminal_locationstring | nullРозташування терміналу (null, якщо недоступне)

Відповідь з помилкою

HTTP-код: 400

Тіло відповіді:

{
  "statusCode": 400,
  "message": [
    "retailerId must be a UUID",
    "name must be shorter than or equal to 27 characters",
    "merchantCompensationPercentage must be at least 0"
  ],
  "error": "Bad Request"
}

Коди помилок:

  • 400 — помилки валідації (невірний UUID, довжина рядка, діапазон числа)
  • 401 — неавторизовано (відсутній або невірний JWT-токен)
  • 403 — заборонено (недостатньо прав — потрібна роль ADMIN або EDITOR)

Отримання списку мерчантів

Метод: GET

Ендпоінт: deeployalty-admin/retailers

Успішна відповідь

HTTP-код: 200

Тіло відповіді:

[
  {
    "retailerId": "711df0c2-209c-4e54-accf-484820e7e43f",
    "name": "Deeployalty",
    "webhookUrl": null,
    "apiUrl": null,
    "description": null,
    "logoUrl": "data:image/svg+xml;base64,PD94bWwg...",
    "iosAppUrl": null,
    "androidAppUrl": null,
    "login": null,
    "urlIdent": null,
    "rro": null,
    "nameEn": null,
    "cardIssuing": null,
    "cardPresentationId": "d29ea407-8f47-4b44-9826-f1db2e57fa75",
    "isReview": false,
    "isMask": false,
    "dataSaleToWebhook": null,
    "domain": ["deeployalty.io"],
    "excludedBank": null,
    "merchantCategoryCode": [
      "1111",
      "2222",
      "3333",
      "4444",
      "5555",
      "6666",
      "7777",
      "8888",
      "9999"
    ],
    "createdAt": "2025-07-24T14:18:29.944Z",
    "updateAt": "2025-10-24T11:28:13.695Z"
  }
]

Отримання даних мерчанта

Метод: GET

Ендпоінт: deeployalty-admin/retailers/

name

nameEn

Успішна відповідь

HTTP-код: 200

Тіло відповіді:

{
  "retailerId": "711df0c2-209c-4e54-accf-484820e7e43f",
  "name": "Deeployalty",
  "webhookUrl": null,
  "apiUrl": null,
  "description": null,
  "logoUrl": "data:image/svg+xml;base64,PD94bWwg...",
  "iosAppUrl": null,
  "androidAppUrl": null,
  "login": null,
  "urlIdent": null,
  "rro": null,
  "nameEn": null,
  "cardIssuing": null,
  "cardPresentationId": "d29ea407-8f47-4b44-9826-f1db2e57fa75",
  "isReview": false,
  "isMask": false,
  "dataSaleToWebhook": null,
  "domain": ["deeployalty.io"],
  "excludedBank": null,
  "merchantCategoryCode": [
    "1111",
    "2222",
    "3333",
    "4444",
    "5555",
    "6666",
    "7777",
    "8888",
    "9999"
  ],
  "createdAt": "2025-07-24T14:18:29.944Z",
  "updateAt": "2025-10-24T11:28:13.695Z"
}

Підтвердження кешбек-кампанії банком

Метод: POST

Ендпоінт: /cashbacks?cashbackId/confirm

Параметри:

ПараметрТипОбов’язковийОпис
cashbackIduuidТакID кешбеку

Успішна відповідь

HTTP-код: 201

Тіло відповіді:

{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "status": "awaitingBankApproval",
  "message": "Cashback confirmed successfully",
  "createdAt": "2024-06-16T12:00:00Z",
  "updatedAt": "2024-06-16T12:00:00Z"
}

Відповідь з помилкою

HTTP-код: 400

Тіло відповіді:

{
  "statusCode": 400,
  "message": "Cashback not found",
  "error": "Bad Request"
}

Коди помилок:

  • 400 — Bad Request (кешбек не знайдено, невірний ID кешбеку)
  • 401 — неавторизовано (відсутній або невірний JWT-токен)
  • 403 — заборонено (недостатньо прав — потрібна роль ADMIN або EDITOR, або користувач не є банком)

Відхилення кешбек-кампанії банком

Метод: POST

Ендпоінт: /cashbacks?cashbackId/reject

Параметри:

ПараметрТипОбов’язковийОпис
cashbackIduuidТакID кешбеку

Тіло запиту:

ПараметрТипОбов’язковийОпис
commentstringНіКоментар із причиною відхилення
{
  "comment": "Campaign does not meet our requirements"
}

Успішна відповідь

HTTP-код: 201

{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "status": "awaitingBankApproval",
  "message": "Cashback confirmed successfully",
  "createdAt": "2024-06-16T12:00:00Z",
  "updatedAt": "2024-06-16T12:00:00Z"
}

Відповідь з помилкою

HTTP-код: 400

Тіло відповіді:

{
  "statusCode": 400,
  "message": "Cashback not found",
  "error": "Bad Request"
}

Коди помилок:

  • 400 — Bad Request (кешбек не знайдено, невірний ID кешбеку)
  • 401 — неавторизовано (відсутній або невірний JWT-токен)
  • 403 — заборонено (недостатньо прав — потрібна роль ADMIN або EDITOR, або користувач не є банком)