☰ Меню · Ресторани та кафе
Посібники

Ресторани та кафе

Три речі, які POS закладу може робити з Loyaltyfy: синхронізувати QR-меню, приймати замовлення зі столів і вести лояльність на касі.

Зазвичай саме POS є джерелом правди щодо цін і того, чого немає в наявності. Передайте для кожної страви ваш артикул у external_id і далі звертайтеся до страв за ним. Зберігати наші id не потрібно.

  1. 1
    Прочитайте, що вже є

    GET /v1/menu повертає категорії, страви та модифікатори всіма мовами. Додайте ?lang=en, щоб отримати звичайні рядки однією мовою.

  2. 2
    Створіть те, чого бракує

    POST /v1/menu/items з category (id категорії або ваш код категорії; невідомий код створює категорію), external_id, name однією чи кількома мовами та price. Повторний запит із тим самим external_id повертає наявну страву.

  3. 3
    Надсилайте зміни

    Після кожної зміни або раз на кілька хвилин надсилайте POST /v1/menu/items/bulk із цінами та наявністю. До 500 страв за запит. Невідомі артикули повертаються в not_found.

curl
curl https://loyaltyfy.io/api/v1/menu/items/bulk \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      { "item": "1001", "price": 4800 },
      { "item": "2040", "available": false },
      { "item": "3017", "price": 9900, "old_price": 12000 }
    ]
  }'
Відповідь · 200
{
  "object": "menu_bulk_result",
  "updated": ["1001", "2040"],
  "unchanged": [],
  "not_found": ["3017"],
  "failed": []
}

Стоп-лист: available: false залишає страву видимою з позначкою «немає в наявності» та прибирає кнопку замовлення, visible: false приховує її. Модифікатори мають власний перемикач, тож можна вимкнути вівсяне молоко, не вимикаючи каву:

curl
curl -X PATCH https://loyaltyfy.io/api/v1/menu/option_values/MOD-OAT \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{ "available": false }'
Фото, описи та переклади заклад зазвичай редагує в редакторі меню Loyaltyfy. Синхронізуйте лише те, що справді належить POS (ціни, наявність, можливо назви), щоб дві системи не перезаписували одна одну.

Замовлення зі столу

Якщо замовлення ввімкнено (Меню → Замовлення у кабінеті), гості, які сканують QR на столі, можуть надіслати свій кошик закладу. Кожен стіл має власне посилання з номером столу:

curl
https://loyaltyfy.io/m/your-venue?table=12

Ми розраховуємо вартість кожного замовлення на своєму боці за актуальним меню, тому POS може довіряти сумам. Замовлення зі стравою чи модифікатором зі стоп-листа відхиляються ще до того, як потраплять до вас.

  1. 1
    Отримуйте нові замовлення

    Підпишіться на вебхук order.created або опитуйте GET /v1/orders?status=new кожні 10-15 секунд.

  2. 2
    Прийміть замовлення

    Створіть замовлення в POS, потім викличте POST /v1/orders/{id}/accept з вашим id замовлення в external_id. Для зіставлення з вашими артикулами використовуйте external_id кожної позиції.

  3. 3
    Ведіть його далі

    PATCH /v1/orders/{id} зі статусами preparing, ready, served, completed. Або POST /v1/orders/{id}/reject із причиною, якщо кухня не може його прийняти.

curl
curl "https://loyaltyfy.io/api/v1/orders?status=new" \
  -H "Authorization: Bearer sk_test_..."
Одне замовлення зі списку
{
  "object": "order",
  "id": "0c69a81c-0fbc-4333-b26c-789566b9bea4",
  "number": 10,
  "status": "new",
  "table": "7",
  "note": "No onions, please",
  "currency": "MDL",
  "subtotal": 14000,
  "item_count": 2,
  "items": [
    {
      "item_id": "a48343bd-9f6e-424a-b003-fe790617f4d6",
      "external_id": "2040",
      "name": "Zeamă",
      "quantity": 2,
      "unit_price": 7000,
      "total": 14000,
      "options": []
    }
  ],
  "external_id": null,
  "reject_reason": null,
  "guest_language": "en",
  "source": "qr_menu",
  "livemode": true,
  "created_at": "2026-10-06T18:14:48.233+00:00",
  "accepted_at": null,
  "completed_at": null,
  "updated_at": "2026-10-06T18:14:48.233+00:00"
}
curl
curl -X POST https://loyaltyfy.io/api/v1/orders/0c69a81c-0fbc-4333-b26c-789566b9bea4/accept \
  -H "Authorization: Bearer sk_test_..." \
  -H "Content-Type: application/json" \
  -d '{ "external_id": "POS-ORDER-55821" }'

Статуси змінюються лише вперед: new → accepted → preparing → ready → served → completed. Зі статусу new замовлення може також перейти в rejected, а будь-яке відкрите замовлення можна перевести в cancelled. Кроки можна пропускати (наприклад, одразу з accepted у completed). Спроба повернутися назад отримає 409 invalid_status_transition. Заклади без інтеграції з POS керують тими самими статусами на екрані Замовлення, тож цілком нормально, якщо ваш POS лише приймає та завершує замовлення.

Лояльність на касі кафе

Так само, як у будь-якій інтеграції з POS: шукайте гостя під час скану картки, надсилайте чек після оплати. У кав'ярнях зі штамп-карткою («кожна 6-та кава безкоштовно») штамп нараховується за чек. Передавайте line_items з вашими артикулами, щоб заклад бачив, що купують гості.

Питання щодо інтеграції: api@loyaltyfy.io. Відповідаємо протягом одного робочого дня.