API без PII (фаза 1)

DeepLoyalty API без ПІІ

Цей API не обробляє персональні ідентифікаційні дані (ПІІ). Визначення ПІІ та ендпоінти Фази 2, які їх використовують, див. у API з PII (фаза 2).

Загальна схема

Загальна схема — Співставлення транзакцій

Основне завдання: надіслати інформацію про чек, щоб додати його до транзакції за карткою.

Авторизація

Усі запити до API використовують Bearer Token для авторизації.

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

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

Приклад:

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

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

Діаграма послідовності

Діаграма послідовності — API без ПІІ (Фаза 1)


Надіслати чек (Ритейлер)

Метод: PUT

URL: /v3/receiptNI

Опис основного об’єкта

ПараметрТипОбов’язковийОпис
retailer_iduuidТакID ритейлера
order_idstringТакID чека
date_timedatetimeТакДата/час покупки. Формат yyyy-mm-dd HH:MM:SS — місцевий час України
rrnstringТакReference Retrieval Number
pan_maskstringТакМаскований номер картки
added_bonusesnumberТакНараховані бонуси на основі даних чеку в гривнях
sum_before_discountednumberТакСума до знижки
sum_after_discountednumberТакСума після знижки
paid_by_bonusnumberТакСплачені бонуси в гривнях
fiscal_idstringТакID фіскального чека
fiscal_urlstringТакПосилання на відсканований фіскальний чек. Як створити посилання — How to create fiscal url. Якщо в полі немає значення, надішліть два пробіли: " "
terminal_idstringТакID терміналу
positionobject (array minimum 1 item)ТакОпис нижче
terminal_auth_codestringТакКод терміналу
card_idstringНіID картки лояльності — мінімум 2 символи, якщо поле передано
store_idstringТакID магазину
cashier_idstringТакID касира
cashback_amountnumberНіСума кешбеку

Масив position

ПараметрТипОбов’язковийОпис
pos_idstringТакНомер позиції в чеку
skunumberТакКод товару
prod_namestringНіНазва товару
pricenumberТакЦіна зі знижкою //якщо qty більше одного, вкажіть загальну суму ціни (див. приклад нижче)
qtynumberТакКількість
type_qtystringТакТип одиниць виміру товару (штуки, літри тощо)
classificatorobject (array minimum 1 item)ТакОпис нижче
ean13stringНіШтрихкод товару
ccmstringНіКод країни виробника

Об’єкт classificator

ПараметрТипОбов’язковийОпис
name_levelstringТакНазва категорії товару
idstringТакID категорії товару

Body:

{
  "retailer_id": "d516012c-a832-11ec-b909-0242ac120002",
  "order_id": "0224be24-a833-11ec-b909-0242ac120002",
  "date_time": "2022-03-20 18:20:03",
  "rrn": "232353634574657",
  "pan_mask": "446892..67",
  "added_bonuses": 5.34,
  "sum_before_discounted": 863.56,
  "sum_after_discounted": 853.56,
  "paid_by_bonus": 10.90,
  "terminal_id": "AF12312",
  "terminal_auth_code": "123",
  "fiscal_id": "333335",
  "fiscal_url": "https://cabinet.tax.gov.ua/cashregs/check?id=3000895246&fn=236070&date=2022-11-25",
  "card_id": "0123456789",
  "store_id": "127",
  "cashier_id": "099",
  "position": [
    {
      "pos_id": "1",
      "sku": 2588368,
      "ean13": "barcode",
      "ccm: "804",
      "prod_name": "Хліб",
      "price": 25,
      "qty": 1,
      "type_qty": "шт.",
      "classificator": [{"id": "285", "name_level": "Випічка"}] //if classificator has more than one category id, the main category is first
    },
    {
      "pos_id": "1",
      "sku": 243321,
      "ean13": "barcode",
      "ccm: "804",
      "prod_name": "Сир твердий",
      "price": 50, //one item cost 25, but we have 2 - 25*2 = 50
      "qty": 2,
      "type_qty": "шт.",
      "classificator": [{"id": "194", "name_level": "Молочні вироби"}]
    }
  ]
}

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

HTTP-код: 201

Помилка відповіді

HTTP-код: 400

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

{
  "status": 400,
  "code": 1001,
  "message": "Save to queue error"
}

Коди помилок

ПараметрТипОпис
1000numberПомилка валідації
1001numberПомилка збереження в чергу

Webhook з чеком (Банк)

Надіслати чек — діаграма послідовності

Цей об’єкт надсилається банку платформою DeepLoyalty після повної обробки чеку

Метод: PUT

Ендпоінт: /api/receipt/deepLoyalty/order

Заголовки:

X-Token — токен автентифікації

Опис основного об’єкта

ПараметрТипОбов’язковийОписAdd information
bank_iduuidТакID банку
retailer_iduuidТакID ритейлера
order_idstringТакID чека
date_timedatetimeТакДата/час покупки. Формат yyyy-mm-dd HH:MM:SS(ISO string for monobank - 2022-05-04T11:12:00.000Z)
rrnstringТакReference Retrieval Number
pan_maskstringТакМаскований номер картки
added_bonusesnumberТакНараховані бонуси на основі даних чеку в гривнях
sum_before_discountednumberТакСума до знижки
sum_after_discountednumberТакСума після знижки
paid_by_bonusnumberТакСплачені бонуси в гривнях
fiscal_idstringТакID фіскального чека
fiscal_urlobjectТакПосилання на відсканований фіскальний чек.”fiscal_url”:[] — без посилання, “fiscal_url”:[“https://…”] — одне посилання, “fiscal_url”:[“https://…,https:// ”] — два посилання
terminal_idstringТакID терміналу
positionobjectТакОпис нижче
trace_iduuidТакУнікальний ідентифікатор для співставлення транзакцій між ритейлером і банком
terminal_auth_codestringТакКод авторизації терміналу (код підтвердження)
card_idstringНіID картки лояльності. Може не надсилатися, якщо ритейлер не передав значення
store_idstringНіID магазину
cashier_idstringНіID касира
is_reviewbooleanТакПоказувати користувачу опитування про роботу менеджера чи ні
card_is_usingbooleanТакРитейлер підключений до картки лояльності чи ні: true/falseдля відображення кнопки відкриття картки лояльності або перегляду балансу картки
cashback_amountnumberНіСума кешбеку

Масив position

ПараметрТипОбов’язковийОпис
pos_idnumberТакНомер позиції в чеку
skunumberТакКод товару
prod_namestringНіНазва товару
pricenumberТакЦіна зі знижкою
qtynumberТакКількість
type_qtystringТакТип одиниць виміру товару (штуки, літри тощо)
classificatorobject (array minimum 1 item)ТакОпис нижче
ean13stringНіШтрихкод товару
ccmstringНіКод країни виробника

Об’єкт classificator

ПараметрТипОбов’язковийОпис
name_levelstringНіНазва категорії товару
idstringНіID категорії товару

Body:

{
  "retailer_id": "d516012c-a832-11ec-b909-0242ac120002",
  "order_id": "0224be24-a833-11ec-b909-0242ac120002",
  "date_time": "2022-03-20 18:20:03",
  "rrn": "232353634574657",
  "pan_mask": "446892..67",
  "added_bonuses": 5.34,
  "sum_before_discounted": 863.56,
  "sum_after_discounted": 853.56,
  "paid_by_bonus": 10.90,
  "terminal_id": "AF12312",
  "terminal_auth_code": "123",
  "fiscal_id": "333335",
  "fiscal_url": ["https://cabinet.tax.gov.ua/cashregs/check?id=3000895246&fn=236070&date=2022-11-25"],
  "card_id": "0123456789",
  "store_id": "127",
  "cashier_id": "099",
  "position": [
    {
      "pos_id": 0,
      "sku": 2588368, //there can be 12 characters
      "ean13": "barcode",
      "ccm: "804",
      "prod_name": "Хліб",
      "price": 25,
      "qty": 1,
      "type_qty": "шт.",
      "classificator": [{"id": "285", "name_level": "Випічка"}] //if classificator has more than one category id, the main category is first
    },
    {
      "pos_id": 1,
      "sku": 243321,
      "ean13": "barcode",
      "ccm: "804",
      "prod_name": "Сир твердий",
      "price": 50, //one item cost 25, but we have 2 - 25*2 = 50
      "qty": 2,
      "type_qty": "шт.",
      "classificator": [{"id": "194", "name_level": "Молочні вироби"}]
    }
  ]
}

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

HTTP-код: 200

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

{
  "request_id": "64faf2b8-7840-4ff4-898b-3870c7c41762"
}

Оновити чек (Банк)

Банк знаходить і співставляє транзакцію за 4 параметрами:

  • sum_after_discounted
  • terminal_auth_code
  • terminal_id
  • date_time

Метод: PATCH

URL: /receiptNI

HEADERS:

Authorization Bearer {{authToken}}

Content-Type application/json

Опис основного об’єкта

ПараметрТипОбов’язковийОпис
request_idstringТакID чека, повернутий банком під час збереження чека
bank_iduuidТакID банку
transaction_idstringТакID транзакції банку (якщо транзакцію знайдено); якщо транзакцію не знайдено, це поле не обов’язкове
statusuuidТакСтатус транзакції
customer_idstringТакID клієнта (якщо транзакцію знайдено); якщо транзакцію не знайдено, це поле не обов’язкове
trace_iduuidТакУнікальний ідентифікатор для співставлення транзакцій між ритейлером і банком. Той самий trace_id, який Deeployalty надсилає разом із чеком банку.

Значення статусів

СтатусОпис
d0bd04ba-62d0-4161-a31d-d82be5349591Знайдено
20cb9c82-074e-4ace-bc41-9a9bedc736cdНе знайдено
5130bf10-9560-4997-a672-ee8cf8a51c2eБанк витратив час на пошук

Body:

{
  "request_id": "64faf2b8-7840-4ff4-898b-3870c7c41762",
  "bank_id": "d516012c-a832-11ec-b909-0242ac120002",
  "transaction_id": "39d1ab13-10e4-4549-9885-1c6250641aab",
  "trace_id": "43f1ab67-10t6-6543-1234-1c545433aab"
  "status":
  "customer_id":
}

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

HTTP-код: 201

Помилка відповіді

HTTP-код: 400

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

{
  "status": 400,
  "code": 1001,
  "message": "Save to queue error"
}

Коди помилок

ПараметрТипОпис
1000numberПомилка валідації
1001numberПомилка збереження в чергу

Ритейлери та ID банку

Додаткову інформацію про retailer_id та bank_id можна знайти тут: Bank and Retailer ID.