Технічний довідник інтегратора
Syrve Server API
Повний опис серверного REST API Syrve RMS і Syrve Chain: авторизація, номенклатура, склад, каса, персонал, звіти та OLAP.
01Швидкий старт
Чотири кроки, щоб отримати перші дані з сервера.
1. Порахувати SHA1 від пароля
Сервер приймає не пароль, а його SHA1-хеш у нижньому регістрі hex.
# bash
printf "myPassword" | sha1sum
# PowerShell
$p = "myPassword"
$sha = [System.Security.Cryptography.SHA1]::Create()
$h = $sha.ComputeHash([Text.Encoding]::UTF8.GetBytes($p))
($h | ForEach-Object { $_.ToString("x2") }) -join ""
2. Отримати токен
/resto/api/auth?login=[login]&pass=[sha1]https://localhost:8080/resto/api/auth?login=admin&pass=2155245b2c002a1986d3f384af93be813537a476
# Відповідь — просто рядок:
b354d18c-3d3a-e1a6-c3b9-9ef7b5055318
3. Викликати будь-який метод із key
https://localhost:8080/resto/api/corporation/departments?key=b354d18c-3d3a-e1a6-c3b9-9ef7b5055318
4. Обов'язково вийти
/resto/api/logout?key=[token]Звільняє слот ліцензії. Без цього наступна авторизація може впасти з помилкою.
Типовий порт Syrve Server — 8080 або 9080. В офіційних прикладах трапляються обидва; у вашій інсталяції дивіться resto.properties або адресний рядок бек-офісу.
02Базові принципи
Дві гілки API
| Гілка | Префікс | Формат | Коли використовувати |
|---|---|---|---|
| v1 | /resto/api/… | переважно XML | Старі методи: документи, звіти, події, співробітники, постачальники |
| v2 | /resto/api/v2/… | переважно JSON | Усе нове: номенклатура, довідники, OLAP v2, каса, залишки |
Гілки співіснують: одна інтеграція спокійно користується обома. Токен спільний.
Як передавати токен
- параметром
key=…у query-рядку — працює завжди; - cookie з іменем
key— з версії 4.3 сервер сам ставить цю cookie після/auth.
Створення і зміна сутностей
| Метод | Content-Type | Поведінка |
|---|---|---|
| POST | application/x-www-form-urlencoded | Часткове оновлення: передаєте лише ті поля, які змінюєте. Решта лишається як була. |
| PUT | application/xml | Тіло запиту — сама сутність. Поля, відсутні в тілі, отримають значення за замовчуванням при створенні і збережуть свої значення при оновленні. |
- Успішне створення → HTTP
201 Created. - Успішне оновлення → HTTP
200 OK. - Окрема сутність — XML-документ; список сутностей — XML-документ, кореневий елемент якого містить елементи-сутності.
Порожня плашка GET — метод лише читає дані. Залита POST, PUT або DELETE — метод змінює дані на сервері.
Якщо передаєте українські символи в тілі JSON (наприклад, коментар до вилучення), явно вказуйте Content-Type: application/json;charset=UTF-8 — інакше текст поб'ється.
Формати дат
| Формат | Де зустрічається |
|---|---|
yyyy-MM-dd | Більшість методів v2: dateFrom, dateTo, from, to |
yyyy-MM-ddTHH:mm:ss | Мітки часу балансів, dateIncoming у документах |
yyyy-MM-ddTHH:mm:ss.SSS | Події, фільтри за датою в OLAP |
DD.MM.YYYY | Старі звіти v1 і завантаження накладних (dateIncoming, dueDate) |
dd.MM.yyyy у v2 формально приймається, але не рекомендується — використовуйте ISO.
03Авторизація і ліцензійні слоти
/resto/api/auth?login=[login]&pass=[sha1passwordhash]| Параметр | Опис |
|---|---|
login | Логін користувача бек-офісу |
pass | SHA1-хеш пароля (hex, нижній регістр) |
У відповіді: рядок-токен. Його треба передавати в кожному наступному запиті — як cookie key або як параметр key.
/resto/api/logout?key=[token]Завершує сесію і звільняє слот ліцензії. Працює і з cookie key без параметра.
Кожна авторизація займає слот ліцензії API. Токен живе, доки не перестане працювати. Якщо ліцензія на сервері одна, а токен ви вже отримали — наступний запит на авторизацію поверне помилку.
Практика: або зберігайте токен і перевикористовуйте його, або обов'язково викликайте /logout після роботи. Найгірший сценарій — авторизуватися в циклі й не виходити.
Час життя сесії
Типовий таймаут — 1 година від входу або від останнього запиту. Оновлення токена в REST API v1/v2 не реалізовано, тому після 401 просто авторизуйтеся заново.
Права доступу
Права перевіряються за користувачем, під яким ви увійшли. Найчастіші вимоги:
| Код права | Назва | Потрібне для |
|---|---|---|
B_ADM | Адміністрування системи | Налаштування підприємства |
B_EN | Редагування номенклатурних довідників | Експорт та імпорт номенклатури |
B_VTJ | Переглядати журнал подій | API подій |
B_QMENU | Переглядати швидке меню | API швидкого меню |
B_APIO | Переглядати типи внесень/вилучень | Довідник payInOutTypes |
F_APIO | Авторизовувати касові внесення і вилучення | Виконання вилучень |
04Помилки
Будь-який метод v1 або v2 замість очікуваної відповіді може повернути помилку з тілом text/plain.
| Код | Значення | Що робити |
|---|---|---|
| 400 | Помилка в запиті: не той тип параметра, помилка десеріалізації, неповні дані. Wrong date format: 2019-0513 15:26, Malformed Product id: '' | Виправити запит |
| 401 | Не автентифіковано: не передано key, минув таймаут сесії, сервер перезавантажився або ще стартує й не може перевірити пароль | Авторизуватися заново |
| 403 | Доступ заборонено: немає ліцензії на цей модуль API (Module %s is blocked within current license), вичерпано кількість підключень (License enhancement is required: no connections available for module %s), бракує права (Permission denied) | Показати користувачеві. Текст не локалізований |
| 404 | Об'єкт не знайдено або некоректний шлях | Повідомити користувача чи розробника |
| 409 | Помилка бізнес-логіки. Сервер повертає повідомлення для людини: «Доступ заборонено КОД_ПРАВА», «Операція створює прихід на від'ємні залишки…», «У вас немає права змінювати документи заднім числом», «Неможливо створити накладну зі складами, що належать різним підрозділам» — і сотні інших | Показати текст користувачеві як є |
| 500 | Внутрішня помилка: product == null, java.net.SocketException: Connection reset, Operation is allowed only in %s's thread, One product expected for article=%s but %d found | Залогувати, за потреби — звернення в підтримку |
Як читати тіло помилки
- Тіло
Content-Type: text/plain— це текст помилки. Показуйте його при409і завжди пишіть у власний лог. - Тіло
text/html— це не помилка Syrve. Це мережева проблема або помилка конфігурації: одрук в URL, збій DNS, налаштування проксі, «порожній» Tomcat без сервера RMS/Chain; рідше — рестарт сервера. - Текст може містити обов'язкові переноси рядків — виводьте з
white-space: pre-line. - Текст не екранований і може містити небезпечні для HTML/JS/SQL символи. Екрануйте самі.
- Логи сервера (
full.log,access.csv) містять більше, ніж бачить клієнт API, — зокрема попередження рівня WARN.
Скільки слотів ліцензії лишилось
/resto/api/licence/info?moduleId={moduleId}Повертає кількість вільних слотів для конкретного ліцензійного модуля, наприклад ?moduleId=28008806. Дату закінчення ліцензії цей метод не повертає.
05Обмеження і поради
Сервер закладу — не хмара. Він одночасно обслуговує каси, і невдалий запит з API здатен його підвісити.
- Запити — строго послідовно. Наступний відправляйте лише після того, як завершився попередній. Паралельні виклики не підтримуються.
- Період — не більше місяця. Ідеально — день або тиждень.
- Вимикайте підсумки. Якщо загальні підсумки в OLAP не потрібні —
build-summary=false. Для великих мережtrueможе підвісити сервер. З версії 9.1.2 значення за замовчуванням і такfalse. - Не більше 7 полів у побудові OLAP-звіту.
- Спочатку демо-сервер. Перевіряйте запити на демо-стенді, а не на робочому сервері клієнта.
- Важкі поля — вночі.
StartBalance.*іFinalBalance.*в OLAP підсумовують усю таблицю проводок за весь час роботи системи. Для залишків використовуйте окреме API балансів (розділ 16).
06Ревізії та синхронізація
Майже кожен метод-«список» підтримує параметр revisionFrom. Це головний механізм інкрементальної синхронізації: замість того щоб щоразу тягнути весь довідник, ви забираєте лише те, що змінилося.
| Параметр | Тип | Поведінка |
|---|---|---|
revisionFrom | число | Повертає сутності з ревізією суворо більшою за вказану. За замовчуванням -1 — тобто повний, неревізійний запит |
Правильний цикл синхронізації
- Перший запит:
revisionFrom=-1— отримуєте все. - З відповіді запам'ятовуєте поле
revision— це максимальна ревізія, доступна для вивантаження на момент запиту. - Наступний запит:
revisionFrom={збережена revision}— приходять лише зміни. - Повторюєте.
У журналі подій параметр називається from_rev, і туди треба передавати revision + 1 з попередньої відповіді, бо межа там включна. Також: якщо працюєте за ревізією, не можна вказувати to_time.
Підтримка revisionFrom у більшості методів v1 з'явилася у версії 6.4, у методах v2 — від початку.
07Структура підприємства
Ієрархія підрозділів
/resto/api/corporation/departments/Версія 3.9 · параметр revisionFrom з 6.4 · відповідь: corporateItemDto
| Код типу | Що це |
|---|---|
CORPORATION | Корпорація |
JURPERSON | Юридична особа |
ORGDEVELOPMENT | Структурний підрозділ |
DEPARTMENT | Торговельне підприємство (заклад) |
MANUFACTURE | Виробництво |
CENTRALSTORE | Центральний склад |
CENTRALOFFICE | Центральний офіс |
SALEPOINT | Точка продажу |
STORE | Склад |
Поля corporateItemDto
| Поле | Опис |
|---|---|
id | GUID об'єкта ієрархії |
parentId | GUID батьківського об'єкта |
code | Код |
name | Найменування |
type | Тип із таблиці вище |
taxpayerIdNumber | Податковий номер юрособи (в Україні — ЄДРПОУ / ІПН) |
jurPersonAdditionalPropertiesDto | З 6.3: розширені реквізити юрособи, зокрема iban і swiftBic — саме те, що потрібне для української звітності |
Склади
/resto/api/corporation/stores/Усі склади торговельних підприємств у вигляді corporateItemDto
Групи відділень і точки продажу
/resto/api/corporation/groups/Версія 4.3 · відповідь: groupDto
У групі відділень може бути кілька точок продажу, але головна каса (pointOfSaleDto/main = true) підключається лише до однієї. У Syrve Chain інформація про касу точки продажу (cashRegisterInfo) може бути відсутня.
Режим обслуговування групи — groupServiceMode: FAST_FOOD, TABLE_SERVICE, PETROLEUM.
Термінали
/resto/api/corporation/terminals/Версія 4.3 · відповідь: terminalDto (id, name, computerName, anonymous, groupInfo, restaurantSectionIds)
Зазвичай цікавлять лише фронтові термінали. Вони розрізняються за полем anonymous: у кас — false, у бек-офісів і системних терміналів — true.
Пошук
/resto/api/corporation/departments/search?code={regex}/resto/api/corporation/stores/search?code={regex}/resto/api/corporation/groups/search?name={regex}&departmentId={uuid}/resto/api/corporation/terminals/search?name={regex}&computerName={regex}&anonymous=falseУсі code і name — регулярні вирази. Якщо передати просто рядок, шукається будь-яке його входження з урахуванням регістру. Пошук закладу за кодом має сенс переважно в Syrve Chain: у межах одного RMS сутність типу DEPARTMENT лише одна.
Працює тільки якщо коди складів заповнені. Поле необов'язкове і за замовчуванням порожнє.
Налаштування підприємства
/resto/api/corporation/settingsВерсія 6.2 · потрібне право B_ADM
{ "vatAccounting": "VAT_INCLUDED_IN_PRICE" }
VAT_INCLUDED_IN_PRICE — ПДВ включено в ціну закупівлі; VAT_NOT_INCLUDED_IN_PRICE — не включено. Це визначає, як рахувати суми в накладних.
08Довідники і рахунки
Універсальний метод довідників
/resto/api/v2/entities/list?rootType={Type}Версія 5.0 · rootType можна передавати кілька разів
| rootType | З версії | Що повертає |
|---|---|---|
Account | 5.0 | Рахунки, зокрема склади |
AccountingCategory | 5.0 | Бухгалтерська категорія номенклатури |
AlcoholClass | 5.0 | Клас алкогольної продукції |
AllergenGroup | 7.1.2 | Група алергенів |
AttendanceType | 6.4 | Тип явки співробітника |
Conception | 7.8.1 | Концепція |
CookingPlaceType | 7.0.2 | Тип місця приготування |
DiscountType | 5.0 | Тип знижки |
MeasureUnit | 5.0 | Одиниця виміру |
OrderType | 6.4 | Тип замовлення |
PaymentType | 5.0 | Тип оплати |
ProductCategory | 5.0 | Користувацька категорія номенклатури |
ProductScale | 6.4 | Шкала розмірів |
ProductSize | 6.4 | Розмір продукту |
ScheduleType | 6.4 | Тип зміни |
TaxCategory | 6.2.2 | Податкова категорія (ставка ПДВ) |
Параметри
| Параметр | Опис |
|---|---|
includeDeleted | true/false. За замовчуванням — включати видалені |
revisionFrom | Інкрементальна вибірка, див. розділ 6 |
format | Застаріле з 6.2.2, не використовується |
Формат відповіді
| Поле | Опис |
|---|---|
id | GUID об'єкта |
rootType | Тип, який ви передали |
deleted | true — позначений видаленим |
code | Код, артикул, табельний номер. Рядок, може бути null |
name | Назва. Для системних об'єктів — мовою запиту (заголовок Accept-Language) |
Додаткові поля за типами
| Тип | Поле | Значення |
|---|---|---|
OrderType | orderServiceType | COMMON — звичайне замовлення; DELIVERY_BY_COURIER — доставка кур'єром; DELIVERY_PICKUP — самовивіз |
OrderType | defaultForServiceType | Тип замовлення за замовчуванням для цього режиму |
ProductSize | shortName | Коротка назва розміру |
TaxCategory | vatPercent | Ставка ПДВ |
GET /resto/api/v2/entities/list?rootType=DiscountType&rootType=PaymentType&includeDeleted=false
[
{ "id":"97ab68db-…","rootType":"DiscountType","deleted":false,"code":null,"name":"Знижка 20%" },
{ "id":"09322f46-…","rootType":"PaymentType", "deleted":false,"code":"CASH","name":"Готівка" },
{ "id":"9e250341-…","rootType":"PaymentType", "deleted":false,"code":null, "name":"Безготівковий розрахунок" }
]
Він повертає загальну довідкову інформацію без прив'язки до підрозділів і строків дії. У результаті можуть бути записи (наприклад, типи оплат), заборонені до застосування в конкретному підрозділі. Використовуйте його, щоб отримати назви об'єктів для відображення у звітах, — не для бізнес-логіки.
Тільки ідентифікатори
/resto/api/v2/entities/{entityType}/idsВерсія 9.1 · повертає плаский масив GUID. Приймає includeDeleted і revisionFrom. Приклад: /resto/api/v2/entities/Account/ids?includeDeleted=false&revisionFrom=10
Рахунки
/resto/api/entities/accounts/listПараметри: includeDeleted (з 5.4), revisionFrom (з 6.4)
| Поле | Опис |
|---|---|
id | GUID рахунку |
accountParentId | GUID батьківського рахунку; у складів — null |
parentCorporateId | GUID об'єкта структури корпорації, якому належить склад |
code | Код рахунку, наприклад 5.01 |
name | Назва; для системних рахунків — мовою запиту |
type | Тип рахунку, див. розділ 21 |
system | true — попередньо встановлений склад на standalone RMS |
customTransactionsAllowed | Чи дозволені ручні проводки |
rootType | З 6.2.2 — завжди Account |
Метод повертає лише довідкову інформацію: без балансів і без матеріально відповідальних осіб. Баланси — у розділі 16.
09Номенклатура
Потрібне право B_EN «Редагування номенклатурних довідників» — і на читання, і на запис.
Елементи номенклатури
/resto/api/v2/entities/products/listВерсія 6.1
| Параметр | З версії | Тип | Опис |
|---|---|---|---|
includeDeleted | 6.1 | Boolean | Включати видалені. За замовчуванням false |
ids | 6.2 | List<UUID> | Фільтр за GUID |
nums | 6.2 | List<String> | Фільтр за артикулом |
types | 6.2 | List<ProductType> | Фільтр за типом |
categoryIds | 6.2 | List<UUID> | Фільтр за категорією продукту |
parentIds | 6.2 | List<UUID> | Фільтр за батьківською групою |
Щоб відібрати елементи, у яких поле порожнє, передайте параметр без значення: parentId=. На сервері це стане списком з одним елементом [null].
Кілька значень — повторенням параметра: parentId=111&parentId=222&parentId=333 → [111, 222, 333]. Комбінація parentId=111&parentId=222&parentId= → [111, 222, null].
Основні поля
| Поле | З версії | Тип | Опис |
|---|---|---|---|
id | 6.1 | UUID | Ідентифікатор |
deleted | 6.1 | Boolean | Видалений |
name | 6.1 | String | Назва |
description | 6.1 | String | Опис |
num | 6.1 | String | Артикул — використовується під час друку документів і техкарт |
code | 6.1 | String | Код швидкого пошуку на екрані редагування замовлення |
parent | 6.1 | UUID | Батьківська група; null — коренева |
type | 6.1 | Enum | GOODS товар · DISH страва · PREPARED заготовка (напівфабрикат) · SERVICE послуга · MODIFIER модифікатор · OUTER зовнішні товари постачальників · RATE тариф (дочірній до послуги) |
mainUnit | 6.1 | UUID | Основна одиниця виміру |
taxCategory | 6.1 | UUID | Податкова категорія (ставка ПДВ) |
category | 6.1 | UUID | Користувацька категорія |
accountingCategory | 6.1 | UUID | Бухгалтерська категорія |
defaultSalePrice | 6.1 | BigDecimal | Ціна за замовчуванням, грн (якщо немає наказів про меню) |
defaultIncludeInMenu | 6.1 | Boolean | Чи включати позицію в меню за замовчуванням |
placeType | 6.1 | UUID | Місце приготування. Обов'язкове, якщо defaultIncludeInMenu = true |
excludedSections | 6.1 | Set<UUID> | Відділення, де цю страву продавати не можна |
unitWeight | 6.1 | BigDecimal | Вага однієї одиниці, кг |
unitCapacity | 6.1 | BigDecimal | Об'єм однієї одиниці, л |
notInStoreMovement | 6.1 | Boolean | Чи бере участь у переміщеннях по складу |
color, fontColor | 6.2 | RGBColorDto | Колір фону і шрифту кнопки на касі: {red, green, blue} |
frontImageId | 6.2 | UUID | Зображення для каси |
position | 6.2 | Integer | Позиція в меню |
modifiers | 6.2 | List | Модифікатори (без урахування схем модифікаторів) |
containers | 6.2.4 | List | Фасування |
modifierSchemaId | 6.4 | UUID | Схема модифікаторів |
productScaleId | 6.4 | UUID | Шкала розмірів. Якщо задана схема модифікаторів — шкала береться з неї |
coldLossPercent | 7.1.2 | BigDecimal | Втрати при холодній обробці, % |
hotLossPercent | 7.1.2 | BigDecimal | Втрати при гарячій обробці, % |
allergenGroups | 7.1.5 | Set<UUID> | Групи алергенів |
canSetOpenPrice | 7.4.4 | Boolean | Вільна ціна |
useBalanceForSell | — | Boolean | Товар продається на вагу |
barcodes | 8.7.1 | List | Штрихкоди: {barcode, containerId} |
Модифікатор — ChoiceBindingDto
| Поле | Тип | Опис |
|---|---|---|
modifier | UUID | GUID модифікатора або номенклатурної групи, якщо модифікатор груповий |
defaultAmount | Integer | Кількість за замовчуванням. У групового = сумі значень дочірніх |
freeOfChargeAmount | Integer | Кількість безкоштовних. Не більше максимальної |
minimumAmount | Integer | Мінімальна кількість. Для обов'язкового модифікатора має бути > 0 |
maximumAmount | Integer | Максимальна кількість |
hideIfDefaultAmount | Boolean | Ховати, якщо кількість за замовчуванням |
required | Boolean | Обов'язковий. З 6.2.3 у відповіді не використовується |
childModifiersHaveMinMaxRestrictions | Boolean | Обмеження min/max у дочірніх. У дочірніх та одиночних має бути false |
splittable | Boolean | Подільність. Тільки для схем модифікаторів |
childModifiers | List | Дочірні модифікатори |
Фасування — ContainerDto
| Поле | Опис |
|---|---|
id, num, name | Ідентифікатор, артикул, назва |
count | Кількість продукту в основних одиницях виміру |
containerWeight | Вага тари |
fullContainerWeight | Вага разом із тарою |
minContainerWeight, maxContainerWeight | Мін./макс. вага елемента номенклатури |
useInFront | Використовувати на касі |
backwardRecalculation | Завжди false |
deleted | Видалене |
Створення елемента
/resto/api/v2/entities/products/saveВерсія 6.1 · тіло — JSON
| Параметр URL | Опис |
|---|---|
generateNomenclatureCode | Чи генерувати артикул. За замовчуванням true |
generateFastCode | Чи генерувати код швидкого пошуку. За замовчуванням true |
Обов'язкові поля тіла
| Поле | Обов'язкове | Примітка |
|---|---|---|
name | так | Назва |
type | так | GOODS, DISH, PREPARED, MODIFIER, SERVICE, RATE |
mainUnit | так | GUID одиниці виміру |
num | умовно | Обов'язковий, якщо generateNomenclatureCode = false |
placeType | умовно | Обов'язковий, якщо defaultIncludeInMenu = true |
accountingCategory | ні | За замовчуванням «товар» |
unitWeight | ні | За замовчуванням 1 |
unitCapacity, defaultSalePrice | ні | За замовчуванням 0 |
Редагування, видалення, відновлення
/resto/api/v2/entities/products/updateТіло — те саме, що й для save, плюс id елемента. Параметри URL: overrideFastCode, overrideNomenclatureCode (обидва за замовчуванням false)
/resto/api/v2/entities/products/delete/resto/api/v2/entities/products/restoreТіло: {"items":[{"id":"…"},{"id":"…"}]}. У restore є параметр overrideNomenclatureCode (з 6.4): якщо артикул відновлюваного продукту збігається з чинним, буде згенеровано новий.
{
"result": "SUCCESS",
"errors": null,
"response": [ { "id":"fcdf4324-…", "deleted":true, "name":"test API-6", … } ]
}
Номенклатурні групи
/resto/api/v2/entities/products/group/list/resto/api/v2/entities/products/group/save/resto/api/v2/entities/products/group/update/resto/api/v2/entities/products/group/deleteВерсія 6.2 · параметри списку: includeDeleted, ids, parentIds, nums і codes (з 6.2.3), revisionFrom (з 6.4)
Поля ProductGroupDto повторюють поля продукту в частині id, deleted, name, description, num, code, parent, плюс налаштування відображення групи на касі.
Користувацькі категорії
/resto/api/v2/entities/products/category/list/resto/api/v2/entities/products/category/save/resto/api/v2/entities/products/category/update/resto/api/v2/entities/products/category/delete/resto/api/v2/entities/products/category/restoreШкала і розміри
/resto/api/v2/entities/productScales/resto/api/v2/entities/productScales/{productScaleId}/resto/api/v2/entities/productScales/save/resto/api/v2/entities/productScales/update/resto/api/v2/entities/productScales/delete/resto/api/v2/entities/productScales/restore/resto/api/v2/entities/products/{productId}/productScale/resto/api/v2/entities/products/productScalesВерсія 6.4 · шкала розмірів і прив'язка розмірів до продуктів
Зображення
/resto/api/v2/images/load?imageId={imageId}/resto/api/v2/images/save/resto/api/v2/images/deleteGUID завантаженого зображення підставляється в поле frontImageId елемента номенклатури.
Швидке меню
/resto/api/v2/entities/quickLabels/list/resto/api/v2/entities/quickLabels/save/resto/api/v2/entities/quickLabels/updateПотрібне право B_QMENU
Швидке меню складається з трьох сторінок, кожна — сітка 3 × 8. У комірці — або елемент номенклатури, або група.
| Поле | Тип | Опис |
|---|---|---|
id | UUID | Ідентифікатор швидкого меню |
dependsOnWeekDay | boolean | Чи залежить меню від дня тижня |
departmentId | UUID | Підрозділ, для якого діє меню |
sectionId | UUID | Відділення. null — меню для всього підрозділу |
pageNames | List<String> | Назви сторінок — рівно три |
labels[].day | Integer | День тижня: 0 — понеділок … 6 — неділя, або null |
labels[].page | Integer | Сторінка: 0, 1, 2 |
labels[].x | Integer | X-координата: 0, 1, 2 |
labels[].y | Integer | Y-координата: 0…7 |
labels[].entityId | UUID | GUID сутності |
labels[].entityType | Enum | PRODUCT або PRODUCT_GROUP |
10Технологічні карти
/resto/api/v2/assemblyCharts/getAll?dateFrom={d}&dateTo={d}&includeDeletedProducts=true&includePreparedCharts=falseУсі техкарти за період
/resto/api/v2/assemblyCharts/getAllUpdate?knownRevision={n}&dateFrom={d}&dateTo={d}Інкрементально: лише те, що змінилося після knownRevision
/resto/api/v2/assemblyCharts/getTree?date={d}&productId={uuid}&departmentId={uuid}Дерево техкарти — з розкладанням напівфабрикатів
/resto/api/v2/assemblyCharts/getAssembled?date={d}&productId={uuid}&departmentId={uuid}Згорнута («зібрана») техкарта
/resto/api/v2/assemblyCharts/getPrepared?date={d}&productId={uuid}&departmentId={uuid}/resto/api/v2/assemblyCharts/byId/resto/api/v2/assemblyCharts/getHistory/resto/api/v2/assemblyCharts/save/resto/api/v2/assemblyCharts/deleteТехкарта — версійна сутність: вона діє з певної дати. Тому date / dateFrom–dateTo обов'язкові, а getHistory показує всю історію змін конкретної карти.
Входження товару в страву
/resto/api/reports/ingredientEntryВерсія 3.9 · зворотний пошук: у які страви входить цей інгредієнт
| Параметр | Значення | Опис |
|---|---|---|
department | GUID | Підрозділ |
date | DD.MM.YYYY | На яку дату |
product | GUID | Ідентифікатор продукту |
productArticle | String | Артикул продукту. Пріоритет пошуку: спочатку productArticle, потім product |
includeSubtree | Boolean | Включати рядки піддерев. За замовчуванням false |
11Ціни, накази, розклади
Цінові категорії
/resto/api/v2/entities/priceCategories/resto/api/v2/entities/priceCategories/byId?id={uuid}Версія 7.8 · параметри списку: includeDeleted, id (список), revisionFrom
| Поле | Тип | Опис |
|---|---|---|
id | UUID | Ідентифікатор |
name | String | Назва |
deleted | boolean | Видалена |
code | String | Код елемента довідника |
assignableManually | boolean | Чи можна призначити вручну на касі |
pricingStrategy.type | Enum | ABSOLUTE_VALUE — знижка/націнка абсолютним числом; PERCENT — у відсотках від базової ціни |
pricingStrategy.delta | BigDecimal | Для ABSOLUTE_VALUE. Знак «−» — знижка, «+» — націнка. У гривнях |
pricingStrategy.percent | BigDecimal | Для PERCENT. Діапазон [−100, +∞) |
{
"result": "SUCCESS",
"errors": [],
"response": [
{ "id":"95035a38-…", "name":"Доставка", "deleted":false, "code":"3",
"assignableManually":true, "pricingStrategy":{ "type":"PERCENT", "percent":-5 } },
{ "id":"67a54111-…", "name":"Плюс 100 грн", "deleted":false, "code":"2",
"assignableManually":false, "pricingStrategy":{ "type":"ABSOLUTE_VALUE", "delta":100 } }
],
"revision": 187420
}
Накази про зміну прейскуранта
/resto/api/v2/documents/menuChange/resto/api/v2/documents/menuChange/byId?id={uuid}/resto/api/v2/documents/menuChange/byNumber?documentNumber={n}/resto/api/v2/documents/menuChangeВерсія 7.8 · саме цим документом задаються ціни продажу
MenuChangeDocumentDto
| Поле | Тип | Опис |
|---|---|---|
id | UUID | Ідентифікатор |
dateIncoming | String | Облікова дата проведення, yyyy-MM-dd |
documentNumber | String | Обліковий номер |
status | Enum | NEW · PROCESSED · DELETED |
comment | String | Коментар |
shortName | String | Коротка назва для кнопок на касі |
deletePreviousMenu | Boolean | Якщо true — страви, яких немає в документі, будуть виключені з меню |
scheduleId | UUID | Розклад — для наказу «за часом» |
schedule | PeriodScheduleDto | Розгорнутий розклад. Тільки читання |
dateTo | String | Дата закінчення дії (скасування) наказу |
items | List | Позиції наказу |
MenuChangeDocumentItemDto
| Поле | Тип | Опис |
|---|---|---|
num | Integer | Позиція рядка. При створенні не враховується |
departmentId | UUID | Підрозділ, у якому продається продукт |
productId | UUID | Продукт |
productSizeId | UUID | Розмір продукту |
including | Boolean | Чи включений продукт у прейскурант |
price | BigDecimal | Ціна, грн |
dishOfDay | Boolean | Хіт / страва дня |
flyerProgram | Boolean | Участь у флаєрній програмі |
Редагувати наказ можна лише поки його статус NEW. Якщо id не задано — створюється новий документ; якщо задано — редагується наявний.
Розклади (періоди дії)
/resto/api/v2/entities/periodSchedules/resto/api/v2/entities/periodSchedules/byId?id={uuid}Версія 7.8 · параметри: includeDeleted, id (список), revisionFrom
| Поле | Тип | Опис |
|---|---|---|
id, name, deleted | — | Ідентифікатор, назва, ознака видалення |
periods[].begin | String | Початок напівінтервалу, HH:mm |
periods[].end | String | Кінець напівінтервалу, HH:mm |
periods[].daysOfWeek | List<Integer> | 1 — понеділок … 7 — неділя |
У розкладах (periodSchedules) понеділок — це 1, неділя — 7. У швидкому меню (quickLabels) понеділок — 0, неділя — 6. Легко переплутати.
{
"id": "598ce53a-…",
"name": "Робочий полуденок",
"deleted": false,
"periods": [ { "begin":"16:00", "end":"17:00", "daysOfWeek":[1,2,3,4,5] } ]
}
12Складські документи
Документи розділені на два покоління: старі XML-методи /resto/api/documents/… і нові JSON-методи /resto/api/v2/documents/…. Нові з'явилися у 7.9.3 і покривають акти списання та внутрішні переміщення.
Прибуткова накладна
/resto/api/documents/import/incomingInvoiceВерсія 3.9, редагування з 5.2 · Content-Type: application/xml · тіло: incomingInvoiceDto · відповідь: documentValidationResult
| Поле документа | Опис |
|---|---|
documentNumber | Обліковий номер документа |
dateIncoming | Дата документа. У цьому методі — dd.mm.YYYY |
dueDate | Строк оплати, dd.mm.YYYY |
incomingDate | З 7.6.1: вхідна дата зовнішнього документа, YYYY-mm-dd. Якщо не вказана — береться з dateIncoming |
incomingDocumentNumber | Вхідний номер зовнішнього документа |
invoice | Номер податкової накладної / рахунка-фактури |
supplier | GUID постачальника |
defaultStore | Склад. Якщо вказаний — той самий склад має бути в кожній позиції |
conception / conceptionCode | Концепція (GUID / код, код — з 7.8) |
status | NEW · PROCESSED · DELETED |
useDefaultDocumentTime | false (за замовч.) — використати передані дату-час як є. true — узяти налаштування проведення документів із підрозділу |
employeePassToAccount | Поле «зарахувати співробітнику» |
transportInvoiceNumber | Номер товарно-транспортної накладної |
linkedOutgoingInvoiceId | З 5.4, тільки читання: пов'язана видаткова накладна |
distributionAlgorithm | З 6.0, тільки читання: DISTRIBUTION_BY_SUM · DISTRIBUTION_BY_AMOUNT · DISTRIBUTION_NOT_SPECIFIED |
Позиція накладної
| Поле | Опис |
|---|---|
num | Обов'язкове. Номер позиції в документі |
product / productArticle | Товар: GUID або артикул (з 5.0). Хоча б одне має бути заповнене; GUID має пріоритет |
supplierProduct / supplierProductArticle | Товар у постачальника: GUID або артикул |
amount | Кількість в основних одиницях виміру товару |
actualAmount | Фактична (підтверджена) кількість основних одиниць |
containerId | Фасування |
amountUnit | Базова одиниця виміру |
price | Ціна за одиницю, грн |
priceWithoutVat | З 6.2: ціна без ПДВ за фасування з урахуванням знижки |
sum | Обов'язкове. Сума рядка без урахування знижки. Як правило sum = amount × price / container + discountSum + vatSum |
vatPercent, vatSum | З 5.0: відсоток і сума ПДВ. Якщо не задана сума — рахується за відсотком; якщо не заданий відсоток — береться з картки товару. Задати лише суму без відсотка не можна |
store | Склад позиції |
producer | Виробник/імпортер. Має бути в списку виробників у картці товару |
customsDeclarationNumber | Номер митної декларації |
isAdditionalExpense | З 6.0, тільки читання: чи є рядок додатковою витратою |
У накладній позиція з товаром у ящиках, базова одиниця — кг. 5 ящиків по 1000 грн, у кожному 10 кг:
amount(«в од.») = 5 × 10 = 50actualAmount(«фактична кількість») = 5 × 10 = 50price(«ціна базової одиниці») = 1000 / 10 = 100
Якщо фасування немає — усі поля заповнюються кількістю товару в одиницях виміру.
<document>
<items>
<item>
<num>1</num>
<product>0F22AA60-E8AE-4C8E-80CD-F1E00B88FEC6</product>
<supplierProduct>BF1DA0F2-B511-431E-BC7D-F2A68715054B</supplierProduct>
<amount>3.00</amount>
<actualAmount>3.00</actualAmount>
<price>10.00</price>
<sum>30.00</sum>
<vatPercent>20.00</vatPercent>
<store>1239d270-1bbe-f64f-b7ea-5f00518ef508</store>
</item>
</items>
<documentNumber>dn-7</documentNumber>
<dateIncoming>17.12.2025</dateIncoming>
<useDefaultDocumentTime>true</useDefaultDocumentTime>
<defaultStore>1239d270-1bbe-f64f-b7ea-5f00518ef508</defaultStore>
<supplier>3F08E41C-AA25-4573-B1E0-60B3B8A09F6A</supplier>
<dueDate>27.12.2025</dueDate>
</document>
Відповідь — documentValidationResult
| Поле | Опис |
|---|---|
valid | Результат валідації |
warning | true — помилка некритична, це попередження |
documentNumber | Номер документа |
otherSuggestedNumber | Новий номер, якщо старий порушує унікальність |
errorMessage | Текст помилки (або лише заголовок, якщо є additionalInfo). Не завжди локалізований |
additionalInfo | Деталі. Наприклад, при списанні в мінус — розшифровка по кожній позиції, що дає від'ємні залишки |
Видаткова накладна
/resto/api/documents/import/outgoingInvoiceВерсія 4.4 · Content-Type: application/xml · тіло: outgoingInvoiceDto
| Поле | Опис |
|---|---|
dateIncoming | Облікова дата-час. Якщо не заповнено — час сервера. yyyy-MM-ddTHH:mm:ss |
accountToCode | Рахунок списання товарів. За замовчуванням 5.01 «Витрата продуктів» |
revenueAccountCode | Рахунок виручки. За замовчуванням 4.01 «Торговельна виручка» |
defaultStoreId / defaultStoreCode | Склад. При створенні з проведенням — обов'язковий. Заповнюється або в документі, або в кожному рядку, але не одночасно |
counteragentId / counteragentCode | Контрагент |
conceptionId / conceptionCode | Концепція |
items[].productId / productArticle | Елемент номенклатури |
items[].price | Обов'язкове. Ціна за фасування з урахуванням знижки, грн |
items[].amount | Обов'язкове. Кількість у базових одиницях |
items[].sum | Обов'язкове. Сума рядка без знижки |
items[].discountSum | Сума знижки |
items[].vatPercent, vatSum | ПДВ, з 5.0 |
Розпроведення накладних
/resto/api/documents/unprocess/incomingInvoice/resto/api/documents/unprocess/outgoingInvoiceВерсія 7.7 · тіло — та сама структура документа · відповідь — documentValidationResult
Вивантаження накладних
/resto/api/documents/export/incomingInvoice?from={d}&to={d}&supplierId={uuid}/resto/api/documents/export/outgoingInvoice?from={d}&to={d}&supplierId={uuid}Версія 5.4 · дати YYYY-MM-DD, обидві включно (час не враховується) · supplierId можна повторювати; без нього повертаються всі накладні за період · revisionFrom з 6.4
/resto/api/documents/export/incomingInvoice/byNumber/resto/api/documents/export/outgoingInvoice/byNumber| Параметр | Тип | Опис |
|---|---|---|
number | String | Номер документа |
currentYear | Boolean | Обов'язковий. true — тільки за поточний рік, тоді from і to передавати не можна. false — from і to обов'язкові |
from, to | YYYY-MM-DD | Межі періоду, включно |
Інші документи (XML)
/resto/api/documents/import/productionDocumentАкт приготування · версія 3.9 · поля: storeFrom, storeTo, dateIncoming, documentNumber, status, items[] з product, amount, amountUnit, containerId, num
/resto/api/documents/import/salesDocumentАкт реалізації · версія 3.9 · поля: accountToCode (за замовч. 5.01), revenueAccountCode (за замовч. 4.01), items[] з productId, storeId, amount, sum, discountSum
/resto/api/documents/import/returnedInvoiceПовернення постачальнику · версія 4.4 · ключові поля: incomingInvoiceNumber і incomingInvoiceDate — вихідна прибуткова накладна, counteragentId
<documentValidationResult>
<valid>false</valid>
<warning>false</warning>
<errorMessage>Cannot find document of type INCOMING_INVOICE by number
'TAKT0001' and date '2016-05-01'</errorMessage>
</documentValidationResult>
Інвентаризація
/resto/api/documents/import/incomingInventoryВерсія 5.1 · тіло: incomingInventoryDto · відповідь: incomingInventoryValidationResult
/resto/api/documents/check/incomingInventoryВерсія 5.1 · той самий документ, але без проведення — сервер лише рахує розбіжності й повертає їх
Це найкорисніша пара методів для мобільного застосунку інвентаризації: спершу check, показуєте комірникові розбіжності, і тільки після підтвердження — import.
<incomingInventoryValidationResult>
<valid>true</valid>
<store><id>1239d270-…</id><code>1</code><name>Головний склад</name></store>
<date>2016-07-03T00:26:00+03:00</date>
<items>
<item>
<product><id>c6d6c2f2-…</id><code>00001</code><name>Товар</name></product>
<expectedAmount>13.600000000</expectedAmount>
<expectedSum>535.370000000</expectedSum>
<actualAmount>29.450</actualAmount>
<differenceAmount>15.850000000</differenceAmount>
<differenceSum>623.930000000</differenceSum>
</item>
</items>
</incomingInventoryValidationResult>
У позиції передається productId, amountContainer (кількість у фасуванні) і, за потреби, containerId та comment. Один і той самий товар можна вказати кілька разів різними фасуваннями — сервер підсумує.
Акти списання (v2)
/resto/api/v2/documents/writeoff?dateFrom={d}&dateTo={d}/resto/api/v2/documents/writeoff/byId?id={uuid}/resto/api/v2/documents/writeoff/byNumber?documentNumber={n}/resto/api/v2/documents/writeoffВерсія 7.9.3 · JSON · параметри вибірки: dateFrom і dateTo (обов'язкові, yyyy-MM-dd), status, revisionFrom
Обов'язкові поля при створенні: dateIncoming, status, storeId, accountId і мінімум одна позиція. У позиції обов'язкові productId та amount. Якщо documentNumber не заданий — згенерується автоматично. Редагувати можна лише документ зі статусом NEW.
POST /resto/api/v2/documents/writeoff
{
"dateIncoming": "2026-08-16T23:00",
"status": "NEW",
"comment": "Псування",
"storeId": "7954d76d-6177-402c-ba2a-cc0ff16486fa",
"accountId": "8c46f55a-0698-4e3f-8703-8bb36b24e8ac",
"items": [ { "productId": "50cedffc-04e9-aa79-016b-d1f9c56122e8", "amount": 1 } ]
}
Внутрішні переміщення (v2)
/resto/api/v2/documents/internalTransfer?dateFrom={d}&dateTo={d}/resto/api/v2/documents/internalTransfer/byId?id={uuid}/resto/api/v2/documents/internalTransfer/byNumber?documentNumber={n}/resto/api/v2/documents/internalTransferВерсія 7.9.3 · обов'язкові: dateIncoming, status, storeFromId, storeToId і мінімум одна позиція
{
"dateIncoming": "2026-08-15T06:00",
"status": "NEW",
"storeFromId": "05a407d4-d7c6-4bc2-a578-6ad5de99d468",
"storeToId": "370620fe-c789-46db-9d92-33bec29b82a3",
"items": [
{ "productId": "ccdada6c-…", "amount": 5, "containerId": "e2e67737-…" },
{ "productId": "8972b757-…", "amount": 5, "containerId": "84d13550-…" }
]
}
У відповіді на створення приходить конверт {"result":"SUCCESS","errors":[],"response":{…}} із заповненими num, measureUnitId і cost.
13Постачальники
/resto/api/suppliersВерсія 3.9 · revisionFrom з 6.4 · відповідь — структура employees (постачальник у Syrve — це різновид контрагента)
/resto/api/suppliers/searchПошук за id не виконується. Доступні поля:
| Параметр | Поле в картці |
|---|---|
name | Ім'я в системі |
code | Таб. номер / код |
phone, cellPhone | Телефон, мобільний телефон |
firstName, middleName, lastName | Ім'я, по батькові, прізвище |
email | |
cardNumber | Номер картки (вкладка «Додаткові відомості») |
taxpayerIdNumber | Податковий номер (вкладка «Юр. особа») |
Прайс-лист постачальника
/resto/api/suppliers/{code}/pricelist?date={DD.MM.YYYY}Версія 3.9 · {code} — це код постачальника, не GUID · без параметра date повертається останній прайс-лист
| Поле | Опис |
|---|---|
nativeProduct, nativeProductCode, nativeProductNum, nativeProductName | Товар у нас: GUID, код, артикул, назва |
supplierProduct, supplierProductCode, supplierProductNum, supplierProductName | Товар у постачальника |
costPrice | Вартість товару, грн |
allowablePriceDeviation | Допустиме відхилення від ціни, % |
container | Фасування: id, name, count, containerWeight, fullContainerWeight, useInFront |
14Каса і касові зміни
Список змін
/resto/api/v2/cashshifts/list| Параметр | Значення | Опис |
|---|---|---|
openDateFrom | YYYY-MM-DD | Період відкриття зміни «з», включно |
openDateTo | YYYY-MM-DD | Період відкриття зміни «по», включно |
departmentId | UUID | Список закладів; порожньо — без фільтра |
groupId | UUID | Список груп секцій |
status | Enum | Не може бути порожнім. ANY · OPEN · CLOSED · ACCEPTED прийнята · UNACCEPTED не прийнята · HASWARNINGS підозріла |
revisionFrom | число | З версії 6.4 |
| Поле відповіді | Опис |
|---|---|
id | Ідентифікатор зміни |
sessionNumber | Номер касової зміни в нумерації каси |
fiscalNumber | Фіскальний номер зміни (з РРО) |
cashRegNumber, cashRegSerial | Номер РРО в нумерації Syrve і його серійний номер |
openDate, closeDate, acceptDate | Відкриття, закриття, прийняття. acceptDate = null — зміну не прийнято |
managerId | Відповідальний менеджер |
responsibleUser | Відповідальний касир |
sessionStartCash | Залишок у касі на початок дня, грн |
payOrders | Сума всіх замовлень з урахуванням знижки, грн |
sumWriteoffOrders | Сума замовлень, закритих за рахунок закладу |
salesCash, salesCard, salesCerdit | Продажі готівкою, карткою, у кредит. Так, у salesCerdit одрук у самому API |
payIn | Сума всіх внесень |
payOut | Сума всіх вилучень, без урахування вилучення в кінці зміни |
payIncome | Сума вилучення в кінці зміни |
cashRemain | Залишок у касі після закриття зміни |
cashDiff | Загальне розходження книжкових і фактичних сум |
sessionStaus | Статус зміни. Знову одрук в оригінальній назві поля |
conception, pointOfSale | Концепція і точка продажу зміни |
Зміна за ідентифікатором
/resto/api/v2/cashshifts/byId/{sessionId}/resto/api/v2/cashshifts/closedSessionDocument/{id}Другий метод повертає документ прийняття касової зміни
Платежі, внесення і вилучення за зміну
/resto/api/v2/cashshifts/payments/list/{sessionId}?hideAccepted=falseВерсія 5.4
| Поле | Опис |
|---|---|
sessionId | GUID запитаної зміни |
cashlessRecords | Безготівкові платежі |
payInRecords | Внесення |
payOutRecords | Вилучення |
Запис проводки — info
| Поле | Опис |
|---|---|
id | GUID проводки |
date | Обліковий день, округлений до доби (для оплат замовлень) |
creationDate | Дата з прив'язкою до часу. Може бути меншою за date, якщо «кінець облікового дня» ≠ 00:00 |
group | CARD безготівка · CREDIT кредит · PAYOUT вилучення · PAYIN внесення |
accountId | Редагований рахунок — зазвичай кінцевий рахунок проводки |
counteragentId, paymentTypeId, type, sum, comment | Контрагент, тип оплати, тип проводки, сума, коментар |
auth.user, auth.card | Авторизаційні дані: користувач, номер картки |
causeEvenId | GUID події оплати замовлення |
cashierId, departmentId | Касир, заклад |
cashFlowCategory | Стаття руху грошових коштів: code, parentCategory, type (OPERATIONAL/INVESTMENT/FINANCE) |
Поруч із info є actualSum і originalSum: перша — сума з документа закриття зміни (якщо він її скоригував), друга — сума самої проводки. Аналогічно editedPayAccountId та originalPayAccountId.
Типи внесень і вилучень
/resto/api/v2/entities/payInOutTypes/list?includeDeleted=falseПотрібне право B_APIO
| Поле | Опис |
|---|---|
id | GUID типу внесення/вилучення |
chiefAccount | GUID шеф-рахунку |
account | GUID кор-рахунку. При вилученні кошти йдуть на кор-рахунок, при внесенні — навпаки |
counteragentType | NONE · COUNTERAGENT · EMPLOYEE · SUPPLIER · CLIENT · INTERNAL_SUPPLIER |
transactionType | Тип проводки, див. розділ 21 |
cashFlowCategory | Стаття ДДС |
conception | Концепція: id, code, name |
limit | Гранична сума для внесень/вилучень на касі, грн |
mandatoryFrontComment | Вимагати коментар до операції на касі |
Виконати вилучення
/resto/api/v2/payInOuts/addPayOutВерсія 6.0 · потрібне право F_APIO · Content-Type: application/json;charset=UTF-8
| Поле | Тип | Опис |
|---|---|---|
payOutTypeId | UUID | Тип вилучення |
payOutDate | String | yyyy-MM-dd. Час проставляється поточний |
counteragent | UUID | Контрагент — залежно від типу вилучення |
departmentSumMap | UUID → BigDecimal | Заклад → сума вилучення, грн |
payrollId | UUID | Платіжна відомість. Указується, якщо вилучення йде на кор-рахунок «Поточні розрахунки зі співробітниками» |
comment | String | Коментар |
{
"payOutTypeId": "114c757f-bac4-422c-a184-0935923b60b8",
"payOutDate": "2026-08-13",
"counteragent": "d244cb85-9115-4b4d-8e02-a4f7fdd8ec15",
"departmentSumMap": { "372f68b4-8e7a-bae1-015f-0f9c638f000d": 4500.00 },
"comment": "Аванс постачальнику"
}
# Відповідь
{ "result": "SUCCESS", "errors": null, "payOutSettings": { … } }
При помилці result = ERROR, а errors містить список об'єктів із кодом і текстом помилки.
Платіжні відомості
/resto/api/v2/payrolls/list?dateFrom={d}&dateTo={d}&department={uuid}Версія 6.0 · дати yyyy-MM-dd, включно · є includeDeleted
Повертає payrollId, dateFrom, dateTo, department, documentNumber, status (NEW/PROCESSED/DELETED), comment.
15Співробітники
Список і пошук
/resto/api/employees?includeDeleted=false/resto/api/employees/byDepartment/{departmentCode}/resto/api/employees/byId/{employeeUUID}/resto/api/employees/byCode/{employeeCode}/resto/api/employees/search?firstName={regex}&middleName={regex}Версія 4.0 · includeDeleted з 5.0 · revisionFrom з 6.4
Пошук працює за будь-яким текстовим або булевим полем DTO — регулярним виразом: address, cardNumber, cellPhone, client, code, email, employee, firstName, lastName, login, mainRoleCode, middleName, name, note, phone, supplier. Без параметрів повертає всіх активних.
У Syrve RMS byDepartment ідентичний звичайному списку; різниця з'являється тільки в Syrve Chain.
Створення і редагування
/resto/api/employees/byId/{UUID}Повне заміщення. Новий id → 201 Created. Наявний id → 200 OK і всі поля перезаписуються: не вказали необов'язкове поле — воно скинеться
/resto/api/employees/byId/{employeeUUID}Часткове оновлення. Поля, не вказані в запиті, лишаються без змін. Content-Type: application/x-www-form-urlencoded
/resto/api/employees/byCode/{employeeCode}Створення нового співробітника. Враховується лише код, переданий у тілі PUT-запиту. employeeCode потрапляє в поле «Табельний номер»
/resto/api/employees/byId/{employeeUUID}Порожня відповідь, якщо співробітника видалено (або він уже був видалений). Entity of class User not found by id — якщо GUID неіснуючий
Ключові поля employee
| Поле | Опис |
|---|---|
id | GUID |
code | Табельний номер. Порожній у системних облікових записів |
name | Ім'я в системі |
login | Логін для входу в бек-офіс |
password | Пароль бек-офісу. Тільки на запис, у відповіді не віддається |
pinCode | PIN для входу на касу. Тільки на запис |
mainRoleCode / mainRoleId | Основна посада. Входить у roleCodes / rolesIds |
roleCodes / rolesIds | Усі посади співробітника |
firstName, middleName, lastName | Ім'я, по батькові, прізвище |
phone, cellPhone, email, address, birthday, note | Довідкова інформація |
hireDate, hireDocumentNumber | Дата і номер наказу про прийняття |
fireDate | З 5.4: дата звільнення |
cardNumber | Номер картки співробітника |
taxpayerIdNumber | Податковий номер (в Україні — ІПН) |
gln | З 6.0: Global Location Number — для постачальників |
preferredDepartmentCode | З 5.0: підрозділ, у якому зміни призначаються в першу чергу |
departmentCodes | Призначені підрозділи. null — усі, наявні й майбутні |
responsibilityDepartmentCodes | Підрозділи, де співробітник є відповідальним. null — усі |
supplier, employee, client | Ознаки ролі контрагента |
activationDate, deactivationDate, deleted | Активація, деактивація, видалення |
У полі externalData / publicExternalData можна зберігати власні пари ключ-значення. Формат — XML усередині значення параметра, корінь довільний:
<r><entry><key>crm_id</key><value>18734</value></entry></r>
key обов'язковий, value може бути порожнім.
Посади
/resto/api/employees/rolesrevisionFrom з 6.4
| Поле | Опис |
|---|---|
id, code, name | Ідентифікатор, код, назва посади |
paymentPerHour | Оплата за годину, грн |
steadySalary | З 6.2.2, тільки читання: оклад за місяць, грн |
scheduleType | Стратегія розрахунку зарплати: SESSION за зміну · HOURS погодинно · FIXED оклад |
Оклади
/resto/api/employees/salary/resto/api/employees/salary/byId/{employeeUUID}/resto/api/employees/salary/byId/{employeeUUID}/{YYYY-MM-DD}Третій варіант — оклад на конкретну дату. Установлення окладу — POST на /resto/api/employees/salary
Зміни й розклади
/resto/api/employees/schedule/types/resto/api/employees/schedule/?from={d}&to={d}&withPaymentDetails={bool}&revisionFrom=-1/resto/api/employees/schedule/byEmployee/{employeeUUID}/?from={d}&to={d}/resto/api/employees/schedule/byDepartment/{departmentCode}/?from={d}&to={d}/resto/api/employees/schedule/department/{departmentId}/?from={d}&to={d}/resto/api/employees/schedule/byId/{scheduleUUID}/resto/api/employees/schedule/create/resto/api/employees/schedule/updateДати YYYY-MM-DD. withPaymentDetails=true додає розрахунок оплати. Є варіанти byDepartment/{code} (за кодом підрозділу) і department/{id} (за GUID), а також комбінація з byEmployee
Явки
/resto/api/employees/attendance/types/resto/api/employees/attendance?from={d}&to={d}&withPaymentDetails={bool}&revisionFrom=-1/resto/api/employees/attendance/byEmployee/{employeeUUID}/?from={d}&to={d}/resto/api/employees/attendance/byDepartment/{departmentCode}/?from={d}&to={d}/resto/api/employees/attendance/department/{departmentId}/?from={d}&to={d}/resto/api/employees/attendance/byId/{attendanceUUID}/resto/api/employees/attendance/create/resto/api/employees/attendance/update/resto/api/employees/availability/list?from={d}&to={d}&department={uuid}&role={uuid}&user={uuid}Останній метод — доступність співробітників (побажання щодо графіка)
Бригади офіціантів
/resto/api/employees/waiterTeams/resto/api/employees/waiterTeams/byDepartment/{departmentUUID}/resto/api/employees/waiterTeams/byCode/{teamCode}/resto/api/employees/waiterTeams/byId/{teamUUID}/resto/api/employees/waiterTeams/search?{param}={regexp}&includeDeleted={bool}/resto/api/employees/waiterTeams/assignments/resto/api/employees/waiterTeams/assignments/byDepartment/{departmentId}assignments — призначення офіціантів у бригади
16Залишки і звіти
Залишки на складах
/resto/api/v2/reports/balance/storesВерсія 5.2 · основний спосіб отримати залишки — швидкий, на відміну від OLAP
| Параметр | Опис |
|---|---|
timestamp | Обов'язковий. Облікова дата-час звіту, yyyy-MM-ddTHH:mm:ss |
department | GUID підрозділу, можна кілька |
store | GUID складу, можна кілька |
product | GUID елемента номенклатури, можна кілька |
GET /resto/api/v2/reports/balance/stores?timestamp=2026-08-18T23:10:10
[
{ "store":"657ded9f-…", "product":"f464e4d4-…", "amount":123, "sum":64083 },
{ "store":"1239d270-…", "product":"c6d6c2f2-…", "amount":29.45, "sum":1159.3 }
]
amount — кількісний залишок, sum — грошовий, у гривнях.
Баланси за рахунками і контрагентами
/resto/api/v2/reports/balance/counteragentsВерсія 5.2 · параметри: timestamp (обов'язковий), account, counteragent, department — усі можна повторювати
[
{ "account":"657ded9f-…", "counteragent":null, "department":"ef9461e9-…", "sum":64083 },
{ "account":"8a11a460-…", "counteragent":null, "department":"ef9461e9-…", "sum":-50 }
]
Це готова відповідь на питання «скільки ми винні постачальнику» і «скільки грошей на рахунку» на конкретний момент.
Складські звіти
/resto/api/reports/storeOperationsВерсія 3.9 · відповідь: storeReportItemDto
| Параметр | Значення | Опис |
|---|---|---|
dateFrom, dateTo | DD.MM.YYYY | Період |
stores | GUID | Склади. Порожньо — усі |
documentTypes | Enum | Типи документів (розділ 21). Порожньо — усі |
productDetalization | Boolean | true — деталізація по товарах, але без дати. false — кожен документ одним рядком із сумами |
showCostCorrections | Boolean | Чи включати корекції собівартості. Враховується лише разом із фільтром за типами документів; інакше корекції включаються завжди |
presetId | GUID | Преднастроєний звіт. Якщо вказаний — усі налаштування, крім дат, ігноруються |
/resto/api/reports/storeReportPresetsСписок преднастроєних складських звітів, збережених у бек-офісі
/resto/api/reports/productExpenseВитрата продуктів за продажами · параметри: department, dateFrom, dateTo, hourFrom, hourTo (за замовчуванням -1 — увесь час)
/resto/api/reports/salesЗвіт з виручки · додатково: dishDetails (розбивка по стравах, за замовч. false) і allRevenue (true — усі типи оплат, false — тільки виручка)
/resto/api/reports/monthlyIncomePlanПлан з виручки за день · department, dateFrom, dateTo
Звіти з доставки
У всіх методів цієї групи спільні параметри: department (код або GUID у форматі department={code="005"}; без нього — по всіх підрозділах у Chain), dateFrom, dateTo (DD.MM.YYYY або YYYY-MM-DD).
/resto/api/reports/delivery/consolidatedЗведений звіт: середній чек, кількість страв, кількість замовлень за днями. Додатковий параметр writeoffAccounts — рахунки списання
/resto/api/reports/delivery/couriersЗвіт по кур'єрах. Цільові показники: targetCommonTime (за замовч. 30 хв), targetOnTheWayTime, targetDoubledOrders, targetTripledOrders, targetTotalOrders. Тип метрики: AVERAGE, TARGET, MAXIMUM
/resto/api/reports/delivery/orderCycleЦикл замовлення. Цільові: targetPizzaTime, targetCuttingTime, targetOnShelfTime, targetInRestaurantTime, targetOnTheWayTime, targetTotalTime
/resto/api/reports/delivery/halfHourDetailedПівгодинний деталізований звіт
/resto/api/reports/delivery/regionsЗвіт по регіонах: середній час доставки, відсоток доставлених, максимум замовлень за день
/resto/api/reports/delivery/loyaltyЛояльність: нові гості, замовлень на гостя. Додатково metricType: AVERAGE, MINIMUM, MAXIMUM
17OLAP v1
Проста GET-версія OLAP: усі поля передаються параметрами URL. Для нових інтеграцій рекомендується v2 (розділ 18), але v1 зручний для швидких перевірок і одноразових вивантажень.
/resto/api/reports/olapВерсія 3.9
| Параметр | Значення | Опис |
|---|---|---|
report | SALES · TRANSACTIONS · DELIVERIES · STOCK | Продажі · проводки · доставки · контроль зберігання |
from, to | DD.MM.YYYY | Період |
groupRow | ім'я поля | Групування по рядках. Повторюваний параметр |
groupCol | ім'я поля | Групування по колонках |
agr | ім'я поля | Агрегація |
summary | true / false | Чи рахувати підсумки. З 9.1.2 за замовчуванням false. З false звіт будується значно швидше |
https://localhost:8080/resto/api/reports/olap
?key=ec621550-afae-133e-80c8-76155db2b268
&report=SALES&from=01.08.2026&to=18.08.2026
&groupRow=WaiterName&groupRow=OpenTime
&agr=fullSum&agr=OrderNum
Найуживаніші поля звіту «Продажі»
| Поле | Опис | Групув. | Агрег. | Тип |
|---|---|---|---|---|
OpenDate.Typed | Дата відкриття (для фільтра за датою) | так | ні | DATE |
OpenTime | Час відкриття | так | ні | DATETIME |
CloseTime | Час закриття | так | ні | DATETIME |
DishName | Страва | так | ні | STRING |
DishSumInt | Сума страви, грн | ні | так | MONEY |
DishDiscountSumInt | Сума зі знижкою, грн | ні | так | MONEY |
DishAmountInt | Кількість страв | ні | так | AMOUNT |
WaiterName | Офіціант | так | ні | STRING |
OrderNum | Номер замовлення | так | так | INTEGER |
PayTypes | Типи оплати | так | ні | STRING |
SessionNum | Номер касової зміни | так | ні | INTEGER |
DeletedWithWriteoff | Тип видалення страви | так | ні | ENUM |
OrderDeleted | Ознака видалення замовлення | так | ні | ENUM |
DishServicePrintTime.Max | Сервісний друк останньої страви | ні | так | DATETIME |
Найуживаніші поля звіту «Проводки»
| Поле | Опис | Швидкий залишок | Тип |
|---|---|---|---|
Account.Name | Рахунок (у тому числі склад) | так | STRING |
Account.Code | Код рахунку | так | STRING |
Account.Type | Тип рахунку | так | ENUM |
Account.Group | Група рахунку | так | ENUM |
Account.AccountHierarchyTop … Third | Ієрархія рахунку по рівнях | так | STRING |
Contr-Account.Name | Кор. рахунок / склад | ні | STRING |
DateTime.DateTyped | Обліковий день — поле для фільтра за датою | так* | DATE |
DateTime.Typed | Дата і час | так* | DATETIME |
DateTime.Hour, DayOfWeak, Month, Year | Час, день тижня, місяць, рік | так* | STRING |
Product.Name, Product.Num | Елемент номенклатури, артикул | так | STRING |
Product.Hierarchy, TopParent, SecondParent, ThirdParent | Ієрархія і групи номенклатури по рівнях | так | STRING |
Product.MeasureUnit | Одиниця виміру | так | STRING |
Product.AccountingCategory, Product.Category | Бухгалтерська і користувацька категорії | так | STRING |
Counteragent.Name | Контрагент | так | STRING |
Department, Department.Code, Department.JurPerson | Заклад, код, юрособа | так | STRING |
Conception, Conception.Code | Концепція | так | STRING |
CashFlowCategory та ієрархія | Стаття ДДС | так | STRING |
Document | Номер документа | ні | STRING |
Amount, Amount.In, Amount.Out | Кількість, прихід, витрата | — | AMOUNT |
Sum.Incoming, Sum.Outgoing | Суми приходу і витрати, грн | — | MONEY |
Product.AvgSum | Середня ціна, грн | — | MONEY |
StartBalance.Amount, StartBalance.Money | Початковий залишок товару і грошей | — | AMOUNT / MONEY |
FinalBalance.Amount, FinalBalance.Money | Кінцевий залишок товару і грошей | — | AMOUNT / MONEY |
PercentOfSummary.ByRow, ByCol | % по рядку / по стовпцю | ні | PERCENT |
Поля StartBalance.* і FinalBalance.* обчислюються підсумовуванням усієї таблиці проводок за весь час роботи системи. Такий запит може виконуватися дуже довго і сповільнити сервер.
З 5.5 такі запити оптимізовані через балансові таблиці — але лише якщо групування і фільтри використовують поля, позначені як «швидкий залишок» (StartBalanceOptimizable). Оптимізовано саме Account.Name (рахунок «поточної» сторони проводки, зокрема склад), а не Store.
Правило: склад завжди беріть із Account.Name, а не зі Store — воно рахується значно швидше. А для залишків краще взагалі не використовуйте OLAP: є /resto/api/v2/reports/balance/stores (розділ 16).
Звіти по доставці — поля
Група Delivery.*: Delivery.Number номер доставки, Delivery.Courier кур'єр, Delivery.Address, Delivery.City, Delivery.Street, Delivery.Region район, Delivery.Phone, Delivery.Email, Delivery.CustomerName, Delivery.CustomerComment, Delivery.DeliveryComment, Delivery.MarketingSource реклама, Delivery.SourceKey джерело, Delivery.CancelCause причина скасування, Delivery.ServiceType (PICKUP / COURIER), Delivery.ExpectedTime, Delivery.ActualTime, Delivery.SendTime, Delivery.CloseTime, Delivery.BillTime, Delivery.Delay запізнення у хвилинах, Delivery.WayDuration час у дорозі.
18OLAP v2
Рекомендована версія. Запит — JSON у тілі POST, а перелік доступних полів можна отримати з самого сервера.
Які поля доступні
/resto/api/v2/reports/olap/columns?reportType={SALES|TRANSACTIONS|DELIVERIES}Версія 4.1 · застарілі (deprecated) поля не виводяться
"FieldName": {
"name": "Назва в бек-офісі",
"type": "MONEY",
"aggregationAllowed": true,
"groupingAllowed": false,
"filteringAllowed": false,
"tags": ["Оплата"]
}
| Поле | Опис |
|---|---|
FieldName | Ім'я колонки. Саме його ви передаєте в запиті |
name | Назва колонки в бек-офісі. Довідково |
type | ENUM · STRING · ID (внутрішній ідентифікатор, з 5.0) · DATETIME · INTEGER · PERCENT (0…1) · DURATION_IN_SECONDS · AMOUNT · MONEY |
aggregationAllowed | Чи можна агрегувати |
groupingAllowed | Чи можна групувати |
filteringAllowed | Чи можна фільтрувати |
tags | Категорії поля — те саме, що в правому верхньому куті конструктора звіту |
Побудова звіту
/resto/api/v2/reports/olapВерсія 4.1 · Content-type: application/json; charset=utf-8
{
"reportType": "SALES",
"buildSummary": false,
"groupByRowFields": ["OpenDate.Typed", "DishName"],
"groupByColFields": [],
"aggregateFields": ["DishDiscountSumInt", "DishAmountInt"],
"filters": {
"OpenDate.Typed": {
"filterType": "DateRange",
"periodType": "CUSTOM",
"from": "2026-08-01T00:00:00.000",
"to": "2026-08-31T00:00:00.000"
},
"OrderDeleted": { "filterType": "IncludeValues", "values": ["NOT_DELETED"] }
}
}
| Поле | Опис |
|---|---|
reportType | SALES продажі · TRANSACTIONS проводки · DELIVERIES доставки |
buildSummary | З 5.3.4. Необов'язкове. До 9.1.2 за замовчуванням true, з 9.1.2 — false |
groupByRowFields | Поля групування по рядках. Лише ті, у яких groupingAllowed = true |
groupByColFields | Необов'язкове. Групування по стовпцях |
aggregateFields | Поля агрегації |
filters | Фільтри. Лише поля з filteringAllowed = true |
Кожен OLAP-запит має містити фільтр за датою. Для продажів і доставок це OpenDate.Typed, для проводок — DateTime.DateTyped (дата) або DateTime.Typed (дата-час). У версії 4.1 замість них використовувалися OpenDate і DateTime.OperDayFilter.
Фільтр за значенням
Для полів типу ENUM і STRING.
"DeletedWithWriteoff": {
"filterType": "ExcludeValues",
"values": ["DELETED_WITH_WRITEOFF", "DELETED_WITHOUT_WRITEOFF"]
}
IncludeValues — беруться лише перелічені значення; ExcludeValues — усі, крім перелічених.
Фільтр за діапазоном
Для INTEGER, PERCENT, AMOUNT, MONEY.
"SessionNum": { "filterType": "Range", "from": 758, "to": 760, "includeHigh": true }
includeLow за замовчуванням true, includeHigh — false.
Фільтр за датою
"OpenDate.Typed": {
"filterType": "DateRange",
"periodType": "CUSTOM",
"from": "2026-08-01T00:00:00.000",
"to": "2026-08-03T00:00:00.000",
"includeLow": true,
"includeHigh": false
}
| periodType | Значення |
|---|---|
CUSTOM | Вручну: працюють from, to, includeLow, includeHigh |
OPEN_PERIOD | Поточний відкритий період |
TODAY / YESTERDAY | Сьогодні / вчора |
CURRENT_WEEK / CURRENT_MONTH / CURRENT_YEAR | Поточний тиждень / місяць / рік |
LAST_WEEK / LAST_MONTH / LAST_YEAR | Минулий тиждень / місяць / рік |
Для всіх типів, крім CUSTOM, решта параметрів ігнорується — крім from: його передавати обов'язково, значення може бути будь-яким.
Включати верхню межу має сенс лише для полів, що видають округлену дату, а не дату-час. Для DATETIME лишайте includeHigh: false, інакше отримаєте зайвий день.
Структура відповіді
{
"data": [
{ "OpenDate.Typed":"2026-08-01", "DishName":"Борщ",
"DishDiscountSumInt":2450.00, "DishAmountInt":35 }
],
"summary": [
[ {}, { "DishDiscountSumInt":184300.00, "DishAmountInt":2610 } ],
[ { "OpenDate.Typed":"2026-08-01" },
{ "DishDiscountSumInt":6120.00, "DishAmountInt":88 } ]
]
}
data— лінійні дані звіту, по рядку на запис. Один запис = один рядок у гриді бек-офісу.summary— список блоків із двох структур. Перша — поля групування, за якими зібраний проміжний підсумок (порожня — це загальний підсумок по звіту). Друга — самі підсумки по полях агрегації.- При
buildSummary: falseмасивsummaryбуде порожнім.
Преднастроєні звіти
/resto/api/v2/reports/olap/presets/resto/api/v2/reports/olap/presets/{presetType}/resto/api/v2/reports/olap/byPresetId/{presetId}?dateFrom={d}&dateTo={d}Версія 4.2 · presetType: stock, sales, transactions, deliveries
Не складайте JSON вручну. Побудуйте потрібний OLAP у Syrve Office (розділ «Роздрібні продажі» → «OLAP звіт з продажів» або «Фінанси» → «OLAP звіт з проводок»), додайте поля й період, збережіть під назвою — і викликайте його через byPresetId. Список збережених конфігурацій віддає /presets.
У бек-офісі комбінація Ctrl + Shift + F3 відкриває вікно з параметрами поточного OLAP-звіту — на них зручно орієнтуватися, складаючи запит в API.
19Журнал подій
Потрібні: ліцензійний модуль 2200 (він же API_EVENTS(2200), «iikoAPI (ApiEvents)») і право B_VTJ «Переглядати журнал подій».
Список подій
/resto/api/eventsВерсія 3.9 · відповідь: eventsList
| Параметр | Формат | Опис |
|---|---|---|
from_time | yyyy-MM-ddTHH:mm:ss.SSS | З якого часу. За замовчуванням — початок поточної доби |
to_time | yyyy-MM-ddTHH:mm:ss.SSS | По який час, не включно. За замовчуванням межі немає |
from_rev | число | Ревізія. Кожна відповідь містить тег revision; наступного разу передавайте revision + 1 |
У штатному режимі одна й та сама подія повторно з різними ревізіями не приходить, але гарантії цього немає. GUID події унікальний — використовуйте його як ключ дедуплікації.
Фільтр за типами подій і номерами замовлень
/resto/api/eventsВерсія 5.0 · тіло application/xml
<eventsRequestData>
<events>
<event>orderCancelPrecheque</event>
<event>orderPaid</event>
</events>
<orderNums>
<orderNum>175658</orderNum>
</orderNums>
</eventsRequestData>
Дерево типів подій
/resto/api/events/metadata/resto/api/events/metadataВерсія 3.9 (GET) і 5.0 (POST з фільтром) · відповідь: groupsList
Повертає ієрархію подій — аналог дерева журналу подій у бек-офісі. Поле <id> групи або типу — це те, що ви підставляєте в <type> події. Структура також визначає список атрибутів, специфічних для кожної події, і severity (0 — низька, 1 — середня, 2 — висока).
Запис власних подій
/resto/api/events/addВерсія 8.0.3 · тіло — eventsList
<eventsList>
<event>
<date>2026-08-28T19:24:29.033+03:00</date>
<type>externalDelivery</type>
<departmentId>2</departmentId>
<attribute>
<name>userName</name><value>Адміністратор</value>
<type>java.lang.String</type>
</attribute>
<attribute>
<name>success</name><value>1</value>
<type>java.lang.Boolean</type>
</attribute>
</event>
</eventsList>
| type атрибута | Що класти у value |
|---|---|
java.lang.Boolean | "0" — false, "1" — true |
java.lang.String | Текст |
java.util.Date | Дата у форматі yyyy-MM-dd'T'HH:mm:ss.SSS |
resto.db.Guid | UUID |
Нащадки java.lang.Number (java.lang.Integer, java.math.BigDecimal) | Число |
Нащадки resto.db.CachedEntity (User, Department, Terminal) | UUID відповідного довідника |
Тип події може бути будь-яким рядком до 255 символів. Але якщо цей тип зареєстрований у events.xml, подія має містити всі обов'язкові для нього атрибути.
Касові зміни з журналу подій
/resto/api/events/sessions?from_time={t}&to_time={t}Версія 5.0 · час відкриття і закриття, менеджер, номер зміни, номер каси, операційний день
20Реплікація
Методи мають сенс лише на Syrve Chain. На окремому RMS перші два повернуть помилку.
/resto/api/replication/statusesВерсія 5.0 · список статусів останніх реплікацій усіх під'єднаних до Chain серверів RMS
/resto/api/replication/byDepartmentId/{departmentId}/statusСтатус реплікації конкретного закладу. Помилка, якщо в Chain немає закладу з таким GUID
/resto/api/replication/serverTypeТип сервера: CHAIN, REPLICATED_RMS, STANDALONE_RMS. Працює скрізь — зручно як перша перевірка того, з чим ви взагалі з'єдналися
21Коди базових типів
Ці рядкові константи використовуються і в параметрах запитів, і у відповідях, і як значення enum-фільтрів в OLAP. Перекладу не підлягають.
Типи документів
| Код | Назва | Скор. |
|---|---|---|
INCOMING_INVOICE | Прибуткова накладна | п/н |
OUTGOING_INVOICE | Видаткова накладна | р/н |
RETURNED_INVOICE | Повернена накладна | в/н |
INCOMING_INVENTORY | Інвентаризація | інв |
INCOMING_SERVICE | Акт приймання послуг | в/с |
OUTGOING_SERVICE | Акт надання послуг | в/с |
WRITEOFF_DOCUMENT | Акт списання | а/с |
SALES_DOCUMENT | Акт реалізації | а/р |
SALES_RETURN_DOCUMENT | Акт приймання повернення | п/в |
SESSION_ACCEPTANCE | Прийняття зміни | п/с |
INTERNAL_TRANSFER | Внутрішнє переміщення | в/п |
PRODUCTION_DOCUMENT | Акт приготування | а/пр |
TRANSFORMATION_DOCUMENT | Акт переробки | а/пб |
DISASSEMBLE_DOCUMENT | Акт розбирання | а/рб |
PRODUCTION_ORDER | Замовлення у виробництво | з/п |
CONSOLIDATED_ORDER | Консолідоване замовлення | к/з |
PREPARED_REGISTER | Відомість напівфабрикатів | в/пф |
MENU_CHANGE | Наказ про зміну прейскуранта | п/м |
PRODUCT_REPLACEMENT | Заміна товарів | з/т |
PAYROLL | Платіжна відомість | з/в |
INCOMING_CASH_ORDER | Прибутковий касовий ордер | п/ко |
OUTGOING_CASH_ORDER | Видатковий касовий ордер | р/ко |
Типи проводок
| Код | Назва |
|---|---|
OPENING_BALANCE | Початковий баланс |
CUSTOM | Ручна проводка |
CASH | Продаж за готівку |
CARD | Виручка за картками |
CREDIT | Виручка в кредит |
PREPAY | Передоплата |
PREPAY_CLOSED | Продаж із передоплатою |
PREPAY_RETURN | Повернення передоплати |
PREPAY_CLOSED_RETURN | Повернення продажу з передоплатою |
DISCOUNT | Знижка |
PAYIN | Внесена сума |
PAYOUT | Вилучена сума |
PAY_COLLECTION | Знята виручка (інкасація) |
CASH_CORRECTION | Корекція по касі |
CASH_SURPLUS | Надлишок по касі |
CASH_SHORTAGE | Нестача по касі |
INVENTORY_CORRECTION | Інвентаризація |
STORE_COST_CORRECTION | Корекція собівартості |
INVOICE | Накладна |
INVOICE_PAYMENT | Оплата накладної |
NDS_INCOMING | ПДВ вхідний |
NDS_SALES | ПДВ з продажів |
SALES_REVENUE | Виручка від реалізації |
OUTGOING_INVOICE | Видаткова накладна |
OUTGOING_INVOICE_REVENUE | Виручка видаткової накладної |
RETURNED_INVOICE | Повернена накладна |
RETURNED_INVOICE_REVENUE | Виручка поверненої накладної |
WRITEOFF | Списання |
SESSION_WRITEOFF | Реалізація товарів |
TRANSFER | Внутрішнє переміщення |
TRANSFORMATION | Акт переробки |
PRODUCTION | Акт приготування |
DISASSEMBLE | Акт розбирання |
SALES_RETURN_PAYMENT | Оплата приймання повернення |
SALES_RETURN_WRITEOFF | Повернення товарів |
ON_THE_HOUSE | Оплата замовлення за рахунок закладу |
CLOSE_AT_EMPLOYEE_EXPENSE | Закриття столу за рахунок співробітника |
TARIFF_HOUR | Погодинна оплата |
TARIFF_PERCENT | Відсоток із продажів |
INCENTIVE_PAYMENT | Мотивація |
PENALTY | Штраф |
BONUS | Премія |
ADVANCE | Аванс із зарплати |
EMPLOYEE_PAYMENT | Нарахування окладу |
EMPLOYEE_CASH_PAYMENT | Видача готівки співробітникам |
SESSION_ACCEPTANCE | Прийняття зміни |
INCOMING_SERVICE | Отримання послуг |
OUTGOING_SERVICE | Надання послуг |
INCOMING_SERVICE_PAYMENT | Оплата отримання послуг |
OUTGOING_SERVICE_PAYMENT | Оплата надання послуг |
OUTGOING_DOCUMENT_PAYMENT | Прийняття оплати вихідного документа |
OUTGOING_SALES_DOCUMENT_PAYMENT | Прийняття оплати акта реалізації |
IMPORTED_BANK_STATEMENT | Завантаження банківської виписки |
Рахунки
Група рахунку
ASSETS активи · LIABILITIES зобов'язання · EQUITY капітал · INCOME_EXPENSES доходи/витрати
Склад чи рахунок
STORE склад · ACCOUNT рахунок
Дебет / кредит
DEBIT · CREDIT
Участь у ДДС
CASH_FLOW бере участь · NOT_CASH_FLOW не бере участі
| Тип рахунку | Назва |
|---|---|
CASH | Грошові кошти |
ACCOUNTS_RECEIVABLE | Заборгованість покупців |
DEBTS_OF_EMPLOYEES | Заборгованість співробітників |
CURRENT_ASSET | Поточні активи |
OTHER_CURRENT_ASSET | Основні засоби |
INVENTORY_ASSETS | Складські запаси |
EMPLOYEES_LIABILITY | Розрахунки зі співробітниками |
ACCOUNTS_PAYABLE | Розрахунки з постачальниками |
CLIENTS_LIABILITY | Розрахунки з гостями |
OTHER_CURRENT_LIABILITY | Інші поточні зобов'язання |
LONG_TERM_LIABILITY | Довгострокові зобов'язання |
EQUITY | Капітал |
COST_OF_GOODS_SOLD | Прямі витрати (собівартість) |
INCOME / EXPENSES | Доходи / витрати |
OTHER_INCOME / OTHER_EXPENSES | Інші доходи / інші витрати |
Номенклатура і контрагенти
| Група | Значення |
|---|---|
| Тип елемента номенклатури | GOODS товар · DISH страва · PREPARED заготовка · SERVICE послуга · MODIFIER модифікатор · OUTER зовнішні товари · PETROL паливо · RATE тариф |
| Тип товару (в OLAP) | DISH · GOOD · MODIFIER |
| Типи груп продукту | PRODUCTS продукт · MODIFIERS модифікатор (використовується лише в номенклатурі, що вивантажується в/з RKeeper та StoreHouse) |
| Тип контрагента | NONE · COUNTERAGENT усі · EMPLOYEE співробітник · SUPPLIER постачальник · CLIENT гість · INTERNAL_SUPPLIER внутрішній постачальник |
| Тип алкогольної продукції | STRONG міцні · BEER пиво |
| Тип статті ДДС | OPERATIONAL операційна · INVESTMENT інвестиційна · FINANCE фінансова діяльність |
Замовлення й оплати
| Група | Значення |
|---|---|
| Типи видалення страв | DELETED_WITHOUT_WRITEOFF видалено без списання · DELETED_WITH_WRITEOFF видалено зі списанням · NOT_DELETED не видалено |
| Ознака видалення замовлення | NOT_DELETED · DELETED |
| Ознака доставки | DELIVERY_ORDER доставка · ORDER_WITHOUT_DELIVERY не доставка |
| Ознака банкету | TRUE банкет · FALSE не банкет |
| Тип операції | STORNED сторнування · PREPAY передоплата · PREPAY_RETURN повернення передоплати · NO_PAYMENT без оплати · PAYMENT оплата |
| Група оплати | CASH готівка · CARD банківські картки · NON_CASH безготівковий розрахунок · WRITEOFF без виручки |
| Ознака фіскальності | FISCAL · NOT_FISCAL · NO_PAYMENT |
| Статус документа | NEW · PROCESSED · DELETED |
22Готові рецепти
PowerShell: авторизація, запит, вихід
$host_ = "https://localhost:8080"
$login = "admin"
$passRaw = "myPassword"
function Get-Sha1Hex([string]$s) {
$sha = [System.Security.Cryptography.SHA1]::Create()
$b = $sha.ComputeHash([Text.Encoding]::UTF8.GetBytes($s))
($b | ForEach-Object { $_.ToString("x2") }) -join ""
}
$pass = Get-Sha1Hex $passRaw
$key = Invoke-RestMethod "$host_/resto/api/auth?login=$login&pass=$pass"
try {
# Залишки на складах на зараз
$ts = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss")
$bal = Invoke-RestMethod "$host_/resto/api/v2/reports/balance/stores?key=$key×tamp=$ts"
$bal | Select-Object -First 10 | Format-Table store, product, amount, sum
}
finally {
# Звільняємо слот ліцензії навіть якщо запит упав
Invoke-RestMethod "$host_/resto/api/logout?key=$key" | Out-Null
}
curl: OLAP v2 з фільтром за датою
KEY=$(curl -s "https://localhost:8080/resto/api/auth?login=admin&pass=$SHA1")
curl -s -X POST "https://localhost:8080/resto/api/v2/reports/olap?key=$KEY" \
-H "Content-Type: application/json; charset=utf-8" \
-d '{
"reportType": "SALES",
"buildSummary": false,
"groupByRowFields": ["OpenDate.Typed","DishName"],
"aggregateFields": ["DishDiscountSumInt","DishAmountInt"],
"filters": {
"OpenDate.Typed": {
"filterType":"DateRange","periodType":"CUSTOM",
"from":"2026-08-01T00:00:00.000","to":"2026-08-08T00:00:00.000"
}
}
}'
curl -s "https://localhost:8080/resto/api/logout?key=$KEY"
Інкрементальна синхронізація номенклатури
# 1. Перший прохід
GET /resto/api/v2/entities/products/list?key=…&revisionFrom=-1
# → зберігаємо revision = 187420
# 2. Кожні N хвилин
GET /resto/api/v2/entities/products/list?key=…&revisionFrom=187420
# → приходять лише змінені; оновлюємо збережену revision
# 3. Видалені елементи не зникають — вони приходять із deleted:true,
# тому передавайте includeDeleted=true, якщо треба ловити видалення.
Типові помилки інтеграцій
| Симптом | Причина | Рішення |
|---|---|---|
| Через день інтеграція перестає авторизуватися | Слоти ліцензії вичерпані: авторизувалися в циклі й не викликали logout | Кешувати токен або завжди виходити у finally |
| Замість JSON приходить HTML | Неправильний URL, проксі, Tomcat без сервера RMS або сервер перезапускається | Перевірити базовий URL і /resto/api/replication/serverType |
| OLAP-запит висить хвилинами | У полях агрегації StartBalance.* / FinalBalance.*, або buildSummary: true на великій мережі | Прибрати залишки з OLAP, узяти їх із /v2/reports/balance/stores |
400 Wrong date format | Використали ISO там, де метод чекає DD.MM.YYYY (старі методи v1) | Звірити формат дати з описом конкретного методу |
| Коментарі українською перетворюються на «???» | Не вказано кодування в Content-Type | application/json;charset=UTF-8 |
| Накладна проводиться, але суми не збігаються | Не враховано налаштування «ПДВ включено в ціну закупівлі» | Прочитати /resto/api/corporation/settings |
| Пошук складу за кодом нічого не знаходить | Коди складів не заповнені — поле необов'язкове | Шукати за GUID або заповнити коди в бек-офісі |
| Періодично «губляться» події | Використали from_rev разом із to_time | При роботі за ревізією to_time не передавати |