Начало работы с API
Пример успешного ответа
{
"success": true,
"count": 2,
"rows": [
{some data row 1},
{some data row 2}
],
"error": null
}
Пример ответа с ошибкой
{
"success": false,
"count": 0,
"rows": null,
"error": {
"type": "тип ошибки",
"message": "текстовое описание ошибки"
}
}
Для работы с API необходимо создать ключ авторизации на странице "Настройки - Интеграции" бек-офиса (личного кабинета) с типом "Интеграция по API". При создании ключа задаются права, которые будут доступны при интеграции по данному ключу.
Можно создать несколько ключей для разных интеграций с разным набором прав.
URL для обращений к API:
https://api.ytimes.ru/ex/
Для авторизации в заголовке запросов Authorization передается ключ, созданный в бек-офисе, например:
Authorization: your key
В запросах и ответах используется JSON. Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| success | boolean | Успешно или нет обработался запрос |
| count | int | Кол-во возможных строк результата запроса |
| rows | list | Список строк результата запроса |
| error | object | Информация об ошибке, если запрос неуспешный |
Торговые точки
В аккаунте может быть от 1 до нескольких торговых точек. Некоторые данные аккаунта являются общими для всех точек, некоторые относятся к конкретной точке. Поэтому в большинстве методов API в запросе передается идентификатор торговой точки, для которой нужно запросить или передать данные.
Получение списка торговых точек
Получение списка торговых точек
curl -H "Accept: application/json;charset=UTF-8" \
-H "Content-Type: application/json;charset=UTF-8" \
-H "Authorization: YOUR KEY" \
https://api.ytimes.ru/ex/shop/list
Пример ответа
{
"success":true,
"count":2,
"rows":[{
"guid":"46b9eaa1-e594-4af3-a203-35d5a8f9cec0",
"name":"ул.Садовая",
"type":"SHOP_TABLE",
"cityName":"Камень-на-Оби",
"address":"ул. Садовая, д. 25",
"phone": null
}, {
"guid":"8bef430b-3aad-42e3-83d7-81a3f8782574",
"name":"ул.Кофейная",
"type":"SHOP",
"cityName":"Барнаул",
"address":"ул.Кофейная, д.9",
"phone":"9000000000"
}],
"error":null
}
GET https://api.ytimes.ru/ex/shop/list
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор точки, используется в запросах |
| name | string | Внутреннее наименование точки |
| type | string | Тип точки |
| cityName | string | Город |
| address | string | Адрес точки |
| phone | string | Телефон точки |
Типы торговых точек:
| Тип | Описание |
|---|---|
| SHOP | торговая точка без открытия столиков |
| SHOP_TABLE | торговая точка с открытием столиков |
| SHOP_TIME | торговая точка тайм-кафе (антикафе, с оплатой времени) |
| SHOP_SELF | торговая точка самообслуживания |
| STORAGE | обычный склад без работы с кассой (на складе нельзя создавать заказы) |
Сотрудники
Получение списка сотрудников
Получение списка сотрудников
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d '{"isEnabled" : true}' \
https://api.ytimes.ru/ex/user/list?page=1
Пример ответа
{
"success":true,
"count":1,
"rows":[{
"id":59851,
"guid":"937526df42ae75e6d3cf1bb335801929",
"name":"Игорь",
"comment":null,
"role":{
"id":29091,
"name":"Кассир"
},
"availableShopList":null,
"kmmFio":"Петров И.О.",
"kmmPosition":"бариста",
"kmmInn":null,
"phone":null,
"telegram":null,
"vk":null,
"email":null,
"salaryWeekDaysRateId":null,
"salaryWeekEndRateId":null,
"salaryTimeType":"BY_SHIFT",
"employedDate":"01.08.2022",
"dismissedDate":null,
"docExpireDate":"24.01.2023",
"tipsUrl":null,
"tipsComment":null
}],
"error":null
}
POST https://api.ytimes.ru/ex/user/list
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| page | int | Номер страницы результата. На одной странице отображается не более 100 записей. По умолчанию запрашивается страница 1. |
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| isEnabled | boolean | Если true, запрос только активных сотрудников. Если false, запрос только неактивных сотрудников. |
Сотрудник:
| Поле | Тип | Описание |
|---|---|---|
| id | number | Идентификатор сотрудника |
| guid | string | Идентификатор сотрудника |
| name | string | Внутреннее имя |
| role | object | Должность |
| availableShopList | list | Список торговых точек, доступных сотруднику. Если пусто, то доступны все точки аккаунта |
| kmmFio | string | Фамилия и имя, которые передаются в чек ККТ, если сотрудник принимает заказы |
| kmmPosition | string | Должность, которая передается в чек ККТ, если сотрудник принимает заказы |
| kmmInn | string | ИНН сотрудника, который передается в чек ККТ, если сотрудник принимает заказы |
| phone | string | телефон сотрудника |
| telegram | string | ID телеграмма сотрудника, используемый для отправки уведомлений |
| vk | string | соц сети |
| string | E-mail сотрудника, используемый в уведомлениях | |
| salaryWeekDaysRateId | number | идентификатор ставки зарплаты для будних дней |
| salaryWeekEndRateId | number | идентификатор ставки зарплаты для выходных дней |
| salaryTimeType | string | тип расчета рабочего времени сотрудника |
| employedDate | string | дата приема на работу, формат ДД.ММ.ГГГГ |
| dismissedDate | string | дата увольнения, формат ДД.ММ.ГГГГ |
| docExpireDate | string | последняя дата срока действия документов сотрудника, формат ДД.ММ.ГГГГ |
| tipsUrl | string | ссылка или код для чаевых |
| tipsComment | string | комментарий для чаевых, выводится в чек |
Должность:
| Поле | Тип | Описание |
|---|---|---|
| id | number | Идентификатор должности |
| name | string | Наименование |
Бронирование столиков
Получение списка доступных залов и столиков
Получение списка доступных залов и столиков
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/booking/hall/list?shopGuid=46b9eaa1-e594-4af3-a203-35d5a8f9cec0
Пример ответа
{
"success": true,
"count": 2,
"rows": [
{
"id": 12576,
"name": "Основной зал",
"placeList": [
{
"id": 33106,
"number": 1,
"name": "У окна",
"capacity": 2
},
{
"id": 33111,
"number": 2,
"name": "В углу",
"capacity": 3
},
{
"id": 33116,
"number": 3,
"name": "У окна",
"capacity": 3
}
]
},
{
"id": 12581,
"name": "Малая комната",
"placeList": [
{
"id": 33124,
"number": 1,
"name": "первый",
"capacity": 3
},
{
"id": 33125,
"number": 2,
"name": "второ",
"capacity": 3
},
{
"id": 33126,
"number": 3,
"name": "третий",
"capacity": 3
}
]
}
],
"error": null
}
GET https://api.ytimes.ru/ex/booking/hall/list
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой нужно получить список |
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| id | long | Идентификатор зала (комнаты) |
| name | string | Наименование зала (комнаты) |
| placeList | list | Перечисление списка столиков зала (комнаты) |
Столик:
| Поле | Тип | Описание |
|---|---|---|
| id | long | Идентификатор столика |
| number | long | Номер столика |
| name | string | Наименование столика |
| capacity | long | Вместимость столика |
Информация о занятых столиках
Информация о занятых столиках
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
"https://api.ytimes.ru/ex/booking/busyPlaces?shopGuid=46b9eaa1-e594-4af3-a203-35d5a8f9cec0&date=04.10.2022&timeFrom=19:00&timeTo=21:00"
Пример ответа
{
"success": true,
"count": 2,
"rows": [
{
"placeId": 33126,
"timeFrom": "18:00",
"timeTo": "20:00"
},
{
"placeId": 33131,
"timeFrom": "18:00",
"timeTo": "20:00"
}
],
"error": null
}
GET https://api.ytimes.ru/ex/booking/busyPlaces
Используется, чтобы перед бронированием понять, какие столики заняты и на какое время. В параметры запроса передается дата и время для новой брони, в ответ список занятых столиков.
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой нужно получить список |
| date | string | День в формате дд.мм.гггг |
| timeFrom | string | Время начала в формате чч:мм |
| timeTo | string | Время окончания в формате чч:мм |
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| placeId | long | Идентификатор занятого столика |
| timeFrom | string | Время, со скольки столик занят, формат ЧЧ:ММ |
| timeTo | string | Время, до скольки столик занят, формат ЧЧ:ММ |
Создание брони на дату/время
Создание брони на дату/время
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"shopGuid": "46b9eaa1-e594-4af3-a203-35d5a8f9cec0",
"date": "05.10.2022",
"timeFrom": "12:45",
"timeTo": "19:50",
"placeList": [33126],
"personCount": 5,
"cardNumber": null,
"name": "Иванов Петр",
"phone": "9001112233",
"socialNetworks": "vk.com/id...",
"comment": "дополнительные заметки"
}' \
https://api.ytimes.ru/ex/booking/update
Пример JSON запроса
{
"shopGuid": "46b9eaa1-e594-4af3-a203-35d5a8f9cec0",
"date": "05.10.2022",
"timeFrom": "12:45",
"timeTo": "19:50",
"placeList": [33126],
"personCount": 5,
"cardNumber": null,
"name": "Иванов Петр",
"phone": "9001112233",
"socialNetworks": "vk.com/id...",
"comment": "дополнительные заметки"
}
Пример ответа
{
"success": true,
"count": 1,
"rows": [458971],
"error": null
}
POST https://api.ytimes.ru/ex/booking/update
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой нужно создать бронь |
| date | string | День в формате дд.мм.гггг |
| timeFrom | string | Время начала в формате чч:мм |
| timeTo | string | Время окончания в формате чч:мм |
| placeList | long[] | Список идентификаторов занимаемых столиков |
| personCount | long | Кол-во гостей |
| cardNumber | long | Номер скидочной карты гостя, на кого записывается бронь |
| name | string | Имя гостя, на кого записывается бронь |
| phoneCode | string | Код телефона (страны) гостя, на кого записывается бронь. Например +7 для РФ. |
| phone | string | Телефон гостя, на кого записывается бронь, только цифры без кода страны. Например 9991112233 |
| socialNetworks | string | Ссылка на соц сеть гостя, если бронь не по телефону, а через соц сеть |
| comment | string | Комментарий к брони |
Формат ответа:
В ответ приходит идентификатор созданной брони (число)
Склад
Получение списка групп товаров на складе
Получение списка групп товаров на складе
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/goods/references/group/list
Пример ответа
{
"success": true,
"count": 3,
"rows": [
{
"guid": "b32876a8-a7da-11ed-b223-d00d1341a13e",
"name": "Ингредиенты"
},
{
"guid": "b32876e7-a7da-11ed-b223-d00d1341a13e",
"name": "Расходники"
},
{
"guid": "b328771c-a7da-11ed-b223-d00d1341a13e",
"name": "Выпечка и десерты"
}
],
"error": null
}
GET https://api.ytimes.ru/ex/goods/references/group/list
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор группы товаров |
| name | string | Наименование группы товаров |
Создание или изменение группы товаров
Создание или изменение группы товаров
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"guid": "097ee0e6-9e8a-11f0-9a72-0242ac140006",
"name": "Напитки"
}' \
https://api.ytimes.ru/ex/goods/references/group/save
Пример JSON запроса
{
"guid": "097ee0e6-9e8a-11f0-9a72-0242ac140006",
"name": "Напитки"
}
Пример ответа
{
"success": true,
"count": 1,
"rows": ["097ee0e6-9e8a-11f0-9a72-0242ac140006"],
"error": null
}
POST https://api.ytimes.ru/ex/goods/references/group/save
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор группы товаров, которую хотим изменить. Или пустое значение, если нужно создать новую группу. |
| name | string | Наименование группы товаров |
Формат ответа:
В ответ приходит идентификатор созданной (или измененной) группы товаров (строка)
Получение списка единиц измерения
Получение списка единиц измерения
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/goods/references/unit/list
Пример ответа
{
"success": true,
"count": 5,
"rows": [
{
"guid": "7aa38b0e-a7da-11ed-b223-d00d1341a13e",
"name": "шт",
"type": "COUNT",
"value": 1
},
{
"guid": "7aa38b6d-a7da-11ed-b223-d00d1341a13e",
"name": "мл",
"type": "VOLUME",
"value": 1
},
{
"guid": "7aa38bca-a7da-11ed-b223-d00d1341a13e",
"name": "л",
"type": "VOLUME",
"value": 1000
},
{
"guid": "3fdfcee8-9136-481f-9b3f-9425bade2830",
"name": "Бутылка 500мл",
"type": "VOLUME",
"value": 500
},
{
"guid": "5e8ff2ee-7343-4973-9b00-50a952a45b72",
"name": "Бутылка 750мл",
"type": "VOLUME",
"value": 750
}
],
"error": null
}
GET https://api.ytimes.ru/ex/goods/references/unit/list
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор единицы измерения |
| name | string | Наименование единицы измерения |
| type | string | Тип единицы измерения (WEIGHT - вес, VOLUME - объем или COUNT - штучный) |
| value | double | Значение единицы в граммах/мл или штуках. Например, 750 для единицы "Бутылка 750мл". |
Создание или изменение единицы измерения
Создание единицы измерения
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"guid": null,
"name": "Пачка 930 мл",
"type": "VOLUME",
"value": 930
}
' \
https://api.ytimes.ru/ex/goods/references/unit/save
Пример JSON запроса
{
"guid": null,
"name": "Пачка 930 мл",
"type": "VOLUME",
"value": 930
}
Пример ответа
{
"success": true,
"count": 1,
"rows": ["bd106312-e910-4932-93c9-c7a9e09163ab"],
"error": null
}
POST https://api.ytimes.ru/ex/goods/references/unit/save
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор единицы измерения, которую хотим создать или изменить. Или пустое значение, если нужно создать новую. |
| name | string | Наименование единицы измерения |
| type | string | Тип единицы измерения (WEIGHT - вес, VOLUME - объем или COUNT - штучный) |
| value | double | Значение единицы в граммах/мл или штуках. Например, 750 для единицы "Бутылка 750мл". |
Формат ответа:
В ответ приходит идентификатор созданной (или измененной) единицы измерения (строка)
Получение списка поставщиков
Получение списка поставщиков
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/goods/references/supplier/list
Пример ответа
{
"success": true,
"count": 2,
"rows": [
{
"guid": "7afc8535-a7da-11ed-b223-d00d1341a13e",
"name": "Метро СС",
"fullName": null,
"isCashPayment": false,
"phone": null,
"email": null,
"inn": null,
"kpp": null,
"address": null,
"description": null,
"comment": null,
"egaisRegId": null
},
{
"guid": "0c31dc9f-67ec-4bff-b19d-04e5e15ddc8a",
"name": "ООО \"Кофи Чак\"",
"fullName": "Общество с ограниченной ответственностью \"Кофи Чак\"",
"isCashPayment": false,
"phone": null,
"email": null,
"inn": "1831167610",
"kpp": "183145002",
"address": "Удмуртская Респ, Ижевск г, Максима Горького ул, 72",
"description": null,
"comment": null,
"egaisRegId": "030000475013"
}
],
"error": null
}
GET https://api.ytimes.ru/ex/goods/references/supplier/list
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор поставщика |
| name | string | Наименование наименование поставщика (краткое) |
| fullName | string | Наименование наименование поставщика (полное) |
| isCashPayment | boolean | Признак оплаты наличными при получении |
| phone | string | Телефон поставщика (10 цифр без кода страны в начале. Например 9001112233) |
| string | Почта поставщика | |
| inn | string | ИНН поставщика |
| kpp | string | KPP поставщика |
| address | string | адрес поставщика |
| description | string | описание условий заказа |
| comment | string | комментарий |
| egaisRegId | string | идентификатор в ЕГАИС, если есть |
Создание или изменение поставщика
Создание или изменение поставщика
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"guid": null,
"name":"ООО Десерты плюс",
"fullName":null,
"phone":null,
"email":null,
"inn":null,
"kpp":null,
"address":null,
"description": "Заказ от 1000 руб за день до поставки",
"comment":null,
"egaisRegId":null
}
' \
https://api.ytimes.ru/ex/goods/references/supplier/save
Пример JSON запроса
{
"guid": null,
"name":"ООО Десерты плюс",
"fullName":null,
"phone":null,
"email":null,
"inn":null,
"kpp":null,
"address":null,
"description": "Заказ от 1000 руб за день до поставки",
"comment":null,
"egaisRegId":null
}
Пример ответа
{
"success": true,
"count": 1,
"rows": ["f6431f98-466f-4b19-b39f-17dd0d05b511"],
"error": null
}
POST https://api.ytimes.ru/ex/goods/references/supplier/save
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор поставщика (пустой, если нужно создать нового) |
| name | string | Наименование наименование поставщика (краткое) |
| fullName | string | Наименование наименование поставщика (полное) |
| isCashPayment | boolean | Признак оплаты наличными при получении |
| phone | string | Телефон поставщика (10 цифр без кода страны в начале. Например 9001112233) |
| string | Почта поставщика | |
| inn | string | ИНН поставщика |
| kpp | string | KPP поставщика |
| address | string | адрес поставщика |
| description | string | описание условий заказа |
| comment | string | комментарий |
| egaisRegId | string | идентификатор в ЕГАИС, если есть |
Формат ответа:
В ответ приходит идентификатор созданного (или измененного) поставщика (строка)
Получение списка товаров
Получение списка товаров
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/goods/item/list?shopGuid=46b9eaa1-e594-4af3-a203-35d5a8f9cec0
Пример ответа
{
"success": true,
"count": 3,
"rows": [
{
"guid": "8795e07a-a7da-11ed-b223-d00d1341a13e",
"chainGuid": null,
"name": "Кофе",
"type": "NORMAL",
"packType": null,
"comment": null,
"barCodes": null,
"wastePercent": 0.0,
"mainUnitGuid": "7aa38c84-a7da-11ed-b223-d00d1341a13e",
"mainUnitName": "кг",
"mainUnitValue": 1000,
"additionalUnitGuidList": [],
"groupGuid": "b32876a8-a7da-11ed-b223-d00d1341a13e",
"groupName": "Ингредиенты",
"supplierGuid": null,
"supplierName": null,
"valueRaw": 1976.0,
"priceRaw": 1.245,
"minValueRaw": 0.0
},
{
"guid": "8795e218-a7da-11ed-b223-d00d1341a13e",
"name": "Какао",
"type": "NORMAL",
"packType": null,
"comment": null,
"barCodes": null,
"wastePercent": 0.0,
"mainUnitGuid": "7aa38c84-a7da-11ed-b223-d00d1341a13e",
"mainUnitName": "кг",
"mainUnitValue": 1000,
"additionalUnitGuidList": [],
"groupGuid": "b32876a8-a7da-11ed-b223-d00d1341a13e",
"groupName": "Ингредиенты",
"supplierGuid": null,
"supplierName": null,
"valueRaw": 8000.0,
"priceRaw": 0.0,
"minValueRaw": 0.0
},
{
"guid": "8795e3b6-a7da-11ed-b223-d00d1341a13e",
"name": "Молоко",
"type": "NORMAL",
"packType": null,
"comment": null,
"barCodes": null,
"wastePercent": 0.0,
"mainUnitGuid": "7aa38bca-a7da-11ed-b223-d00d1341a13e",
"mainUnitName": "л",
"mainUnitValue": 1000,
"additionalUnitGuidList": [],
"groupGuid": "b32876a8-a7da-11ed-b223-d00d1341a13e",
"groupName": "Ингредиенты",
"supplierGuid": null,
"supplierName": null,
"valueRaw": 85143.0,
"priceRaw": 0.078,
"minValueRaw": 0.0
}
],
"error": null
}
GET https://api.ytimes.ru/ex/goods/item/list
Список товаров общий для всех торговых точек аккаунта. Но остатки, себестоимость свои на каждой точке. Чтобы в ответ на запрос пришли остатки, в запросе нужно указать идентификатор торговой точки, для которой требуются данные. Или не указывать торговую точку, тогда список вернется без цен и остатков, только сами карточки товаров.
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой нужно получить остатки. Не обязательный параметр. Без него в ответ придут только карточки товаров без остатка. |
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор товара |
| chainGuid | string | Идентификатор товара на уровне всей сети (например, если несколько аккаунтов связаны франшизой) |
| groupGuid | string | Идентификатор группы, в которую включена карточка товаров |
| name | string | Наименование товара |
| type | string | Тип товара (NORMAL - обычный, PACK - заготовка, ALCO_WITHOUT_MARK - алкоголь без акцизных марок, ALCO_MARK - алкоголь с акцизными марками) |
| mainUnitGuid | string | Идентификатор основной единицы измерения |
| mainUnitName | string | Наименование основной единицы измерения |
| mainUnitValue | double | Значение основной единицы в граммах/мл или штуках |
| additionalUnitGuidList | list of string | Список дополнительных вариантов фасовок |
| wastePercent | double | Процент потерь при приготовлении или разделке |
| packType | string | Тип заготовки (AUTO - автоматический приход, MANUAL - приход вручную) |
| comment | string | Комментарий к товару |
| barCodes | string | Штрих-коды товара (может быть несколько через запятую, не более 5) |
| valueRaw | double | Остаток товара в наименьших единицах (в граммах, мл или штуках) на указанной в запросе торговой точке |
| priceRaw | double | Себестоимость товара за наименьшую единицу (за граммах, мл или штуку) на указанной в запросе торговой точке |
| minValueRaw | double | Минимальный остаток товара в наименьших единицах (в граммах, мл или штуках) на указанной в запросе торговой точке |
Создание или изменение карточки товара
Создание или изменение карточки товара
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"guid": null,
"name": "Молоко безлактозное",
"type": "NORMAL",
"mainUnitGuid": "7aa38bca-a7da-11ed-b223-d00d1341a13e",
"groupGuid": "b32876a8-a7da-11ed-b223-d00d1341a13e"
}' \
https://api.ytimes.ru/ex/goods/item/save
Пример JSON запроса
{
"guid": null,
"name": "Молоко безлактозное",
"type": "NORMAL",
"mainUnitGuid": "7aa38bca-a7da-11ed-b223-d00d1341a13e",
"groupGuid": "b32876a8-a7da-11ed-b223-d00d1341a13e"
}
Пример ответа
{
"success": true,
"count": 1,
"rows": ["0f309537-0565-4169-9325-25267a3d4ff9"],
"error": null
}
POST https://api.ytimes.ru/ex/goods/item/save
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор товара (оставить пустым для создания нового товара или передать для изменения существующего) |
| groupGuid | string | Идентификатор группы, в которую включена карточка товаров |
| name | string | Наименование товара |
| type | string | Тип товара (NORMAL - обычный) |
| mainUnitGuid | string | Идентификатор основной единицы измерения |
| additionalUnitGuidList | list of string | Список дополнительных вариантов фасовок |
| wastePercent | number | Процент потерь при приготовлении или разделке |
| comment | string | Комментарий к товару |
| barCodes | string | Штрих-коды товара (может быть несколько через запятую, не более 5) |
Формат ответа:
В ответ приходит идентификатор созданного (или измененного) товара (строка)
Создание документа движения товара (поступления)
Создание документа движения товара (поступления)
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"guid": "e09d2993-9e94-11f0-9a72-0242ac140006",
"shopGuid": "46b9eaa1-e594-4af3-a203-35d5a8f9cec0",
"date": "05.10.2025",
"time": "12:25",
"type": "INCOME",
"incomeSupplierGuid": "f6431f98-466f-4b19-b39f-17dd0d05b511",
"incomeDocDate": "03.10.2025",
"incomeDocNumber": "1234-3344",
"itemList": [{
"goodsGuid": "0f309537-0565-4169-9325-25267a3d4ff9",
"unitGuid": "7aa38bca-a7da-11ed-b223-d00d1341a13e",
"value": 12,
"itemPrice": 112,
"totalPrice": 1344
}, {
"goodsGuid": "8795e3b6-a7da-11ed-b223-d00d1341a13e",
"unitGuid": "7aa38bca-a7da-11ed-b223-d00d1341a13e",
"value": 150,
"itemPrice": 123,
"totalPrice": 18450
}]
}' \
https://api.ytimes.ru/ex/goods/changes/save
Пример JSON запроса
{
"guid": "e09d2993-9e94-11f0-9a72-0242ac140006",
"shopGuid": "46b9eaa1-e594-4af3-a203-35d5a8f9cec0",
"date": "05.10.2025",
"time": "12:25",
"type": "INCOME",
"incomeSupplierGuid": "f6431f98-466f-4b19-b39f-17dd0d05b511",
"incomeDocDate": "03.10.2025",
"incomeDocNumber": "1234-3344",
"itemList": [{
"goodsGuid": "0f309537-0565-4169-9325-25267a3d4ff9",
"unitGuid": "7aa38bca-a7da-11ed-b223-d00d1341a13e",
"value": 12,
"itemPrice": 112,
"totalPrice": 1344
}, {
"goodsGuid": "8795e3b6-a7da-11ed-b223-d00d1341a13e",
"unitGuid": "7aa38bca-a7da-11ed-b223-d00d1341a13e",
"value": 150,
"itemPrice": 123,
"totalPrice": 18450
}]
}
Пример ответа
{
"success": true,
"count": 1,
"rows": ["e09d2993-9e94-11f0-9a72-0242ac140006"],
"error": null
}
POST https://api.ytimes.ru/ex/goods/changes/save
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор документа. Используется как ключ идемпотентности. |
| shopGuid | string | Идентификатор торговой точки, для которой создается документ |
| date | string | Дата, на которую будет зафиксировано движение товара на складе. Формат ДД.ММ.ГГГГ |
| time | string | Время, на которое будет зафиксировано движение товара на складе. Формат ДД.ММ.ГГГГ |
| type | string | Тип документа. INCOME для прихода (поступления, закупки) |
| incomeSupplierGuid | string | Идентификатор поставщика |
| incomeDocDate | string | Дата приходной накладной поставщика |
| incomeDocNumber | string | Номер приходной накладной поставщика |
| itemList | list | Список позиций документа |
Формат позиции документа:
| Поле | Тип | Описание |
|---|---|---|
| goodsGuid | string | Идентификатор товара |
| unitGuid | string | Идентификатор единицы прихода |
| value | double | Кол-во товара в единицах прихода |
| itemPrice | double | Цена за единицу прихода |
| totalPrice | double | Итоговая стоимость позиции |
Формат ответа:
В ответ приходит идентификатор созданного (или измененного) документа (строка)
Меню: позиции
Общие концепции
Меню в заведении разбито на группы. При этом группы могут быть вложенными. Меню запрашивается на каждую торговую точку отдельно (в каждой торговой точке могут быть свои позиции и разные цены).
Меню в заведении может быть разного типа: блюда (то что готовится на точке по рецепту, например напитки или хот доги), обычные товары (которые перепродаются в том виде, в котором их закупили (например, банка кока-колы)), услуги и т.д..
Блюда имеют 1 или несколько вариантов порций (размеров). Например, Капучино может быть 250мл или 400мл. Цена задается на каждую порцию блюда отдельно.
В блюда можно добавлять добавки (например, сироп в кофе или выбор сосиски в хот-доге). Все добавки так же разбиты на группы. В каждом блюде указано, какие группы добавок разрешены для данного блюда (и сколько из них гость может выбрать бесплатно).
Блюда, размеры порций, товары, добавки определяются уникальным идентификатором (поле guid), которые необходимо передавать в заказе. guid не меняется со временем, его можно запомнить на своей стороне для дальнейшей работы.
Получение пунктов меню
Получение пунктов меню
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/menu/v2/group/list?shopGuid=ca34205b-b03f-4c14-8ea9-c95627018a41
Пример ответа
{
"success": true,
"count": 3,
"rows": [
{
"guid": "f8d1f462-0f87-4718-87a0-95bee9eb6782",
"name": "Кофейные напитки",
"priority": 0,
"imageLink": "https://images.ytimes.ru/ac/mspos/menu-item/5c5ee348-b479-442c-8acd-33454e5d3cdx1.png",
"groupList": [
{
"guid": "85e5c245-fcd2-4c1f-b53a-f84b07850d76",
"name": "Сезонные",
"priority": 10,
"imageLink": null,
"groupList": [],
"itemList": []
}
],
"itemList": [{
"guid": "3b116056-cf43-458c-ad31-061ca8515dbe",
"name": "Капучино",
"priority": 15002,
"imageLink": null,
"description": "Кофейный напиток с большим количеством густой молочной пены.",
"recipe": "Готовим эспрессо, взбиваем молоко (пенки должно быть много и она должна быть плотной) и вливаем его в эспрессо. Сиропы добавляются в молоко перед взбиванием. Поверхность молока должна быть глянцевой и без пузырьков.",
"menuType": "RECIPE",
"recipeTypeList": [
{
"guid": "2b1b2bd9-ed7c-4562-858c-b7792f3e8746",
"name": "250мл",
"price": 320.0,
"canApplyDiscount": true,
"orderType": "TOGO"
},
{
"guid": "55414544-ec41-4f93-94e8-ebeb2c8c9ea2",
"name": "400мл",
"price": 370.0,
"canApplyDiscount": true,
"orderType": "TOGO"
}
],
"supplementCategoryToFreeCount": {
"497ef42c-a279-11f0-b7a3-0242ac140004": 0
},
"defaultSupplements": [],
"price": null,
"canApplyDiscount": false
}]
},
{
"guid": "5f131418-a651-4ea3-bb0c-8b8faafee153",
"name": "Прочие напитки",
"priority": 1,
"imageLink": "https://images.ytimes.ru/ac/mspos/menu-item/32813820-f218-134557aa4x1.png",
"groupList": [],
"itemList": [{
"guid": "5abee2cf-db86-4b05-9a93-24def174c88b",
"name": "Вода не газированная",
"priority": 20001,
"imageLink": null,
"description": null,
"recipe": null,
"menuType": "GOODS",
"recipeTypeList": null,
"supplementCategoryToFreeCount": null,
"defaultSupplements": null,
"price": 199.0,
"canApplyDiscount": true
}]
},
{
"guid": "de8b960f-fb99-4b1d-bf73-a6be00143589",
"name": "Хот-доги",
"priority": 2,
"imageLink": "https://images.ytimes.ru/ac/mspos/menu-item/14b259be-92f5-4126-9756-442344417x1.png",
"groupList": [],
"itemList": []
}
],
"error": null
}
GET https://api.ytimes.ru/ex/menu/v2/group/list
Группы могут быть вложенными. Позиции меню могут располагаться как в родительских группах, так и в дочерних. На разных торговых точках часть групп может быть скрыта, часть активна.
Метод позволяет получить как все активные группы аккаунта, так и активные группы отдельной торговой точки (при указании идентификатора точки в запросе). Неактивные группы в ответ не попадают.
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой нужно получить меню. Список позиций меню аккаунта для всех торговых точек одинаковый, но может различаться цена на каждой точке и видимость блюд и напитков. |
Формат ответа: Список корневых групп меню (MenuGroupRecord), внутри которых могут быть как вложенные группы, так и сами пункты меню. Пункты меню уже отсортированы в порядке, заданном в группе (по алфавиту или приоритету).
MenuGroupRecord
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор группы меню |
| name | string | Наименование группы меню |
| priority | long | Число, чтобы отсортировать список (по возрастанию номера) |
| imageLink | string | Картинка, загруженная для группы меню для отображения в приложении кассира |
| groupList | MenuGroupRecord[] | Список вложенных групп, если есть |
| itemList | MenuItemRecord[] | Список пунктов меню, доступных в данной группе |
MenuItemRecord
Пункт меню может быть разного типа (поле menuType). Возможные варианты: RECIPE (тех карта с одним или несколькими вариантами порций), GOODS (товар на продажу), GOODS_WEIGHT (товар, продаваемый на вес или в розлив), OTHER (прочий товар), OTHER_SERVICE (услуга) и некоторые другие.
В завивимости от типа могут быть доступны разные поля. Добавки (модификаторы) применяются только для RECIPE.
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор пункта меню |
| name | string | Наименование пункта меню |
| menuType | string | Тип пункта меню. |
| priority | long | Число, чтобы отсортировать список (по возрастанию номера) |
| imageLink | string | Картинка, загруженная для пункта меню для отображения в приложении кассира |
| recipeTypeList | MenuItemTypeRecord[] | Только для меню с типом RECIPE. Список вариантов порций для тех карт |
| supplementCategoryToFreeCount | map | Только для меню с типом RECIPE. Список пар ключ-значение, показывающий, какие группы добавок (модификаторов) можно применять к пункту меню. Ключ означает guid группы добавок. Значение означает кол-во добавок этой группы, которые можно добавить бесплатно к данном пункту меню. |
| defaultSupplements | string[] | Только для меню с типом RECIPE. Список добавок (модификаторов), которые должны быть выбраны по умолчанию при добавлении данного пункта меню. |
| price | double | Только для меню с типом, отличным от RECIPE. Цена товара или услуги |
| canApplyDiscount | boolean | Только для меню с типом, отличным от RECIPE. Можно ли к цене применять скидку |
MenuItemTypeRecord
Описывает тип (вариант) порции для тех карты. Это могут быть размеры напитков или разные вкусы одного и того же блюда
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор варианта порции |
| name | string | Наименование варианта порции |
| price | double | Цена варианта порции |
| canApplyDiscount | boolean | Можно ли применять скидку к цене |
| orderType | string | Указание, к какому типу заказов относится вариант порции. Доступные значения: TOGO (для заказа с собой), IN (для заказа в зале), ALL (для любого заказа). |
Получение добавок (модификаторов)
Получение добавок (модификаторов)
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/menu/supplement/list?shopGuid=ca34205b-b03f-4c14-8ea9-c95627018a41
Пример ответа
{
"success": true,
"count": 3,
"rows": [
{
"guid": "8a2ac115-3d7a-4ed9-97e5-4223828edc9d",
"name": "Сиропы",
"priority": 0,
"allowSeveralItem": true,
"maxSelectedCount": 3,
"itemList": [
{
"guid": "c29c2cda-956d-4460-8e05-303c525e5653",
"name": "Банан",
"priority": 1,
"defaultPrice": 15.0,
"defaultTogoPrice": 15.0,
"menuTypeToPrice": null
},
{
"guid": "30f84e84-9f5e-44be-a24e-c685eb28fc64",
"name": "Ваниль",
"priority": 2,
"defaultPrice": 15.0,
"defaultTogoPrice": 15.0,
"menuTypeToPrice": null
},
{
"guid": "e4c3d928-0f32-4689-947f-a14b91bb2ba8",
"name": "Карамель",
"priority": 3,
"defaultPrice": 15.0,
"defaultTogoPrice": 15.0,
"menuTypeToPrice": null
}
]
},
{
"guid": "03b604e7-acee-400d-beca-78e4cb5225e2",
"name": "Молочко",
"priority": 1,
"allowSeveralItem": false,
"maxSelectedCount": 1,
"itemList": [
{
"guid": "8bb23e8a-ec1a-4de3-9778-5ed59e0a92e1",
"name": "Соевое молоко",
"priority": 1,
"defaultPrice": 30.0,
"defaultTogoPrice": 30.0,
"menuTypeToPrice": {
"55414544-ec41-4f93-94e8-ebeb2c8c9ea2": 50.0,
"c37d306e-27c5-4a59-a61c-2b0ca65ede47": 70.0
}
},
{
"guid": "c07863c2-9965-4630-9d13-f3a6d387708b",
"name": "Кокосовое молоко",
"priority": 2,
"defaultPrice": 50.0,
"defaultTogoPrice": 50.0,
"menuTypeToPrice": {
"55414544-ec41-4f93-94e8-ebeb2c8c9ea2": 50.0,
"c37d306e-27c5-4a59-a61c-2b0ca65ede47": 70.0
}
}
]
},
{
"guid": "6ca69fbf-fb27-4204-bb0e-629afe0c6574",
"name": "Прочее",
"priority": 2,
"allowSeveralItem": true,
"maxSelectedCount": 2,
"itemList": [
{
"guid": "6e54330c-911a-40d9-afee-dded6d726ca2",
"name": "Корица",
"priority": 2,
"defaultPrice": 0.0,
"defaultTogoPrice": 0.0,
"menuTypeToPrice": null
},
{
"guid": "d269fcad-ae48-11f0-85c7-0242ac140004",
"name": "Сахар",
"priority": 1,
"defaultPrice": 0.0,
"defaultTogoPrice": 0.0,
"menuTypeToPrice": null
}
]
}
],
"error": null
}
GET https://api.ytimes.ru/ex/menu/supplement/list
Получение структуры добавок (модификаторов), которые можно добавлять в блюда или напитки. Модификаторы разбиты на группы. В пунктах меню указывается поле supplementCategoryToFreeCount, в котором перечисляются группы добавок, которые можно указать в пункте меню и максимальное их количество (например, Сиропы - 3шт, Альтернативное молоко - 1шт). Так же в пунктах меню в поле defaultSupplements указаны добавки, которые при заказе должны быть выбраны по умолчанию (например, основной вариант зерна в кофе, если есть выбор зерна).
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой нужно получить добавки. Список добавок аккаунта для всех торговых точек одинаковый, но может различаться цена на каждой точке и видимость добавки. |
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор группы добавок |
| name | string | Наименование группы добавок |
| priority | long | Число, чтобы отсортировать список (по возрастанию номера) |
| maxSelectedCount | boolean | Максимальное количество добавок группы, которое можно добавить к напитку или блюду. Например, не более 3-х сиропов или не более 1 вида молока. |
| allowSeveralItem | boolean | Можно или нет выбирать одну и ту же добавку несколько раз. Например, один и тот же сироп добавить 2 или 3 порции. |
| itemList | SupplementRecord[] | Список добавко (модификаторов) группы |
SupplementRecord:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор добавки |
| name | string | Наименование добавки |
| priority | long | Число, чтобы отсортировать список (по возрастанию номера) |
| defaultPrice | double | Цена добавки по умолчанию |
| defaultTogoPrice | double | Цена добавки по умолчанию при заказе c с собой (если в аккаунте включено разделение цен на с собой и в зале) |
| menuTypeToPrice | map | Цены добавки на разные варианты порции меню. Например, Используется в случае если нужно задать другие цены на больше размеры напитков. |
Получение комбо-наборов
Получение комбо-наборов
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/menu/v2/combo/list
Пример ответа
{
"success": true,
"count": 2,
"rows": [
{
"guid": "f0f90e6c-8082-44b2-aba8-5070d368ada8",
"name": "Введите наименование",
"priority": 0,
"price": 456.0,
"isCalcPrice": false,
"itemList": [
{
"menuGroupGuidList": null,
"menuItemGuidList": [
"3d78ed57-e928-48e0-b612-f919f9290bdc",
"3b116056-cf43-458c-ad31-061ca8515dbe"
],
"menuTypeGuidList": null,
"useItemPrice": true,
"price": null,
"discount": null,
"priceType": "price"
},
{
"menuGroupGuidList": [
"5fa333d3-d448-46a1-8ecf-d7687332ada9"
],
"menuItemGuidList": null,
"menuTypeGuidList": null,
"useItemPrice": true,
"price": null,
"discount": null,
"priceType": "price"
}
],
"allowedWeekDay1": true,
"allowedWeekDay2": true,
"allowedWeekDay3": true,
"allowedWeekDay4": true,
"allowedWeekDay5": true,
"allowedWeekDay6": true,
"allowedWeekDay7": true,
"timeFromLimit": null,
"timeToLimit": null,
"imageLink": null,
"useMinPriceForDiscount": false
},
{
"guid": "3ddd67b9-6a85-4046-9f88-17ee6bf3c117",
"name": "Кофе + круассан бесплатно",
"priority": 1,
"price": null,
"isCalcPrice": true,
"itemList": [
{
"menuGroupGuidList": [
"f8d1f462-0f87-4718-87a0-95bee9eb6782"
],
"menuItemGuidList": null,
"menuTypeGuidList": [
"a64977f9-78dc-4f89-831a-f4c9af4242ef"
],
"useItemPrice": true,
"price": null,
"discount": null,
"priceType": "price"
},
{
"menuGroupGuidList": null,
"menuItemGuidList": [
"332e4c44-05da-41c0-ac23-8b4c6c7ce78f"
],
"menuTypeGuidList": null,
"useItemPrice": false,
"price": null,
"discount": 100,
"priceType": "discount"
}
],
"allowedWeekDay1": true,
"allowedWeekDay2": true,
"allowedWeekDay3": true,
"allowedWeekDay4": true,
"allowedWeekDay5": true,
"allowedWeekDay6": true,
"allowedWeekDay7": true,
"timeFromLimit": null,
"timeToLimit": null,
"imageLink": null,
"useMinPriceForDiscount": false
}
],
"error": null
}
GET https://api.ytimes.ru/ex/menu/v2/combo/list
Метод позволяет получить настройки комбо-наборов.
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор комбо-набора |
| name | string | Наименование комбо-набора |
| priority | double | Число, чтобы отсортировать список (по возрастанию номера) |
| isCalcPrice | boolean | Зависит ли цена комбо-набора от выбранных пунктов меню. Если нет, то цена фиксированная. |
| price | double | Цена комбо-набора. Задана, если стоимость фиксирована (для isCalcPrice = false). |
| itemList | MenuComboItemRecord[] | Список позиций комбо. Например, если комбо из напитка на выбор + десерта, то позиций будет две: доступные напитки и доступные десерты. |
| allowedWeekDay1 | boolean | Доступен ли комбо в понедельник |
| allowedWeekDay2 | boolean | Доступен ли комбо во вторник |
| allowedWeekDay3 | boolean | Доступен ли комбо в среду |
| allowedWeekDay4 | boolean | Доступен ли комбо в четверг |
| allowedWeekDay5 | boolean | Доступен ли комбо в пятницу |
| allowedWeekDay6 | boolean | Доступен ли комбо в субботу |
| allowedWeekDay7 | boolean | Доступен ли комбо в воскресенье |
| timeFromLimit | string | Ограничение действия по времени (начала интервала). Формат ЧЧ:ММ. Если не задано, то комбо доступен с любого времени. |
| timeToLimit | string | Ограничение действия по времени (окончание интервала). Формат ЧЧ:ММ. Если не задано, то комбо доступен до любого времени. |
| imageLink | string | Картинка, загруженная для комбо для отображения в приложении кассира |
MenuComboItemRecord
Описывает позицию комбо (набор пунктов меню, из которых гость делает выбор).
| Поле | Тип | Описание |
|---|---|---|
| menuGroupGuidList | string[] | Доступные группы меню |
| menuItemGuidList | string[] | Доступные пункты меню |
| menuTypeGuidList | string[] | Доступные типы порций (для меню с типом RECIPE) |
| useItemPrice | boolean | Для комбо с isCalcPrice = true. Определяет, использовать ли цену продажи выбранной позиции. Если false, то применяется цена из комбо или скидка из комбо. |
| priceType | boolean | Для комбо с isCalcPrice = true. При useItemPrice = false. Определяет вариант скидки на выбранную позицию: использовать фиксированную цену (значение "price") или использовать скидку на позицию (значение "discount"). |
| price | double | Для комбо с isCalcPrice = true. Для позиции комбо с useItemPrice = false и priceType = "price". Определяет фиксированную цену позиции комбо. |
| discount | double | Для комбо с isCalcPrice = true. Для позиции комбо с useItemPrice = false и priceType = "discount". Определяет значение скидки на позицию комбо. |
Как считается цена на комбо:
Для комбо нужно посчитать цену продажи только если isCalcPrice = true.
Для каждой позиции комбо считаем цену продажи и суммируем. Например:
любой кофе на выбор по обычной цене (useItemPrice = true), гость выбрал капучино за 300 руб.
плюс десерт со скидкой 40% (useItemPrice = false, priceType = "discount", discount = 40), гость выбрал круассан за 250 руб, с учетом скидки это 150 руб.
Итого сумма всех позиций (а значит цена комбо) равна 350 руб.
Вебхук: Изменения в меню
Пример JSON запроса
{
"eventId": "537c9042-af0b-11f0-85c7-0242ac140004",
"type" : "MENU_ITEM"
}
Пример ответа вашего сервера:
OK
Позволяет получить на свой сервер информацию о факте изменений в настройках меню. При получении такого события на своём сервере необходимо перезапросить актуальное меню и закешировать его на своей стороне.
POST {your remote address}
Адрес вашего сервиса, на который будет отправляться запрос, указывается в настройках интеграции в разделе Webhook API в поле "Событие изменения меню".
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| eventId | string | Уникальный идентификатор события принятия заказа. |
| type | string | Тип меню, которое изменилось. Возможные значения: MENU_GROUP (группа меню), MENU_ITEM (пункт меню), SUPPLEMENT_GROUP (группа добавок), SUPPLEMENT (добавка) и т.д. |
В ответ ваш сервер должен вернуть код 200 и текст OK, что будет считаться успешным выполнением запроса.
Меню: Стоп-листы
Получение стоп-листа по меню
Метод позволяет получить список позиций, добавленных в стоп-лист (запрет продажи).
GET https://api.ytimes.ru/ex/menu/stop/list/item
Получение стоп-листа по меню
curl -H "Accept: application/json;charset=UTF-8" \
-H "Content-Type: application/json;charset=UTF-8" \
-H "Authorization: YOUR KEY" \
https://api.ytimes.ru/ex/menu/stop/list/item?shopGuid=ca34205b-b03f-4c14-8ea9-c95627018a41
Пример ответа
{
"success":true,
"count":2,
"rows":[{
"guid":"88dd4511-e8ff-4bba-90be-3a5b5e5c7a7e",
"name":"Флет Уайт",
"typeList":null,
"reasonMessage":"Закончились ингредиенты",
"fromDate":"31.08.2025"
},{
"guid":"2c4f6922-cd53-4aa2-945c-cb98d30df897",
"name":"Латте",
"typeList": [{
"guid": "3b46bed8-1b3f-43c8-9240-f6fcfe430764",
"name": "550мл"
}],
"reasonMessage":"Закончились стаканы 550мл",
"fromDate":"31.08.2025"
}],
"error":null
}
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой нужно получить стоп-лист |
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор позиции меню, находящейся в стоп-листе |
| name | string | Наименование позиции меню, находящейся в стоп-листе |
| typeList | list | Перечисление типов порций позиции, если в стоп-листе только часть порций. Если данное поле пустое или null, значит в стоп-листе все варианты порций позиции. |
| reasonMessage | string | Причина, по которой позиция в стоп-листе |
| fromDate | string | Дата, когда позицию поставили на стоп. Формат ДД.ММ.ГГГГ |
Тип порции:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор типа порции, находящегося в стоп-листе |
| name | string | Наименование типа порции, находящегося в стоп-листе |
Получение стоп-листа по добавкам (модификаторам)
Метод позволяет получить список добавок (модификаторов), добавленных в стоп-лист (запрет продажи). Например, сиропов, которые закончились.
GET https://api.ytimes.ru/ex/menu/stop/list/supplement
Получение стоп-листа по добавкам
curl -H "Accept: application/json;charset=UTF-8" \
-H "Content-Type: application/json;charset=UTF-8" \
-H "Authorization: YOUR KEY" \
https://api.ytimes.ru/ex/menu/stop/list/supplement?shopGuid=ca34205b-b03f-4c14-8ea9-c95627018a41
Пример ответа
{
"success":true,
"count":2,
"rows":[{
"guid":"879354c3-86a5-11f0-ae10-0242ac120003",
"name":"Кокосовое молоко",
"reasonMessage":"Закончились ингредиенты",
"fromDate":"31.08.2025"
},{
"guid":"8df5a25e-86a5-11f0-ae10-0242ac120003",
"name":"Овсяное молоко",
"reasonMessage":"Закончились ингредиенты",
"fromDate":"31.08.2025"
}],
"error":null
}
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой нужно получить стоп-лист |
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор модификатора, находящегося в стоп-листе |
| name | string | Наименование модификатора, находящегося в стоп-листе |
| reasonMessage | string | Причина, по которой модификатор в стоп-листе |
| fromDate | string | Дата, когда модификатор поставили на стоп. Формат ДД.ММ.ГГГГ |
Вебхук: Событие изменения стоп-листа меню
Пример JSON запроса
{
"eventId": "4d3ff740-af0b-11f0-85c7-0242ac140004",
"shopGuid" : "ca34205b-b03f-4c14-8ea9-c95627018a41"
}
Пример ответа вашего сервера:
OK
Список стоп-листа необходимо запросить один раз для торговой точки и закешировать на своей стороне. Подписаться на webhook и запрашивать актуальную версию стоп-листа только при получении события изменения.
POST {your remote address}
Адрес вашего сервиса, на который будет отправляться запрос, указывается в настройках интеграции в разделе Webhook API в поле "Событие изменения стоп-листа меню".
Формат запроса:
| Поле | Тип | Описание |
|---|---|---|
| eventId | string | Ключ идемпонтентности. Несколько запросов с одинаковым eventId нужно обрабатывать один раз при получении первого запроса, остальные игнорировать. |
| shopGuid | string | Идентификатор торговой точки, для которой изменился стоп-лист. |
В ответ ваш сервер должен вернуть код 200 и текст OK, что будет считаться успешным выполнением запроса.
Заказы
Общие концепции
Заказ состоит из одной или нескольких позиций. Каждая позиция - это блюда/напитки (тех карты), товары со склада или услуги. Если позиция является блюдом/напитком (тех картой), то так же указывается вариант порции этого блюда и дополнительные модификаторы (например, вариант молока к кофе).
Цены в заказе можно передавать свои, отличающиеся от цен в меню в системе.
С доставкой мы пока не работаем, поэтому:
- У заказов нет статусов по типу "в процессе приготовления", "готов", "доставляется" и т.п.. Заказ создается в системе и единственное что можно получить - это принят заказ кассиром или отклонен (итого есть 3 состояния: создан, принят кассиром, отклонен кассиром).
- Нет дополнительных полей для указания адресов доставки. Адрес и дополнительную информацию в случае необходимости нужно передавать в поле comment к заказу. Он отобразится у кассира и его можно печатать на чеке.
Создание заказа
Создание заказа
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"guid" : "1209ff96-ae46-11f0-85c7-0242ac140011",
"shopGuid" : "8bef430b-3aad-42e3-83d7-81a3f8782574",
"type" : "TOGO",
"client" : {
"name" : "Федор",
"cardNumber" : null,
"phoneCode" : "+7",
"phone" : "9001112233",
"email" : "example@ytimes.ru"
},
"itemList" : [ {
"menuItemGuid" : "3b116056-cf43-458c-ad31-061ca8515dbe",
"menuTypeGuid" : "55414544-ec41-4f93-94e8-ebeb2c8c9ea2",
"supplementList" : {
"81b18bc4-4b21-4dfe-9bf5-94daaa36ca08" : 1,
"d269fcad-ae48-11f0-85c7-0242ac140004" : 2
},
"priceWithDiscount" : 390.0,
"quantity" : 2
}, {
"menuItemGuid" : "5abee2cf-db86-4b05-9a93-24def174c88b",
"priceWithDiscount" : 110.0,
"quantity" : 1
}],
"comment" : "Пример комментария к заказу",
"paidValue" : 890.0,
"printFiscalCheck" : false,
"printFiscalCheckEmail" : null
}' \
https://api.ytimes.ru/ex/order/save
Пример JSON запроса
{
"guid" : "1209ff96-ae46-11f0-85c7-0242ac140011",
"shopGuid" : "8bef430b-3aad-42e3-83d7-81a3f8782574",
"type" : "TOGO",
"client" : {
"name" : "Федор",
"cardNumber" : null,
"phoneCode" : "+7",
"phone" : "9001112233",
"email" : "example@ytimes.ru"
},
"itemList" : [ {
"menuItemGuid" : "3b116056-cf43-458c-ad31-061ca8515dbe",
"menuTypeGuid" : "55414544-ec41-4f93-94e8-ebeb2c8c9ea2",
"supplementList" : {
"81b18bc4-4b21-4dfe-9bf5-94daaa36ca08" : 1,
"d269fcad-ae48-11f0-85c7-0242ac140004" : 2
},
"priceWithDiscount" : 390.0,
"quantity" : 2
}, {
"menuItemGuid" : "5abee2cf-db86-4b05-9a93-24def174c88b",
"priceWithDiscount" : 110.0,
"quantity" : 1
}],
"comment" : "Пример комментария к заказу",
"paidValue" : 890.0,
"printFiscalCheck" : false,
"printFiscalCheckEmail" : null
}
Пример ответа
{
"success": true,
"count": 1,
"rows": [
{
"guid": "1209ff96-ae46-11f0-85c7-0242ac140011",
"status": "CREATED",
"shopGuid": "8bef430b-3aad-42e3-83d7-81a3f8782574",
"type": "TOGO",
"client": {
"name": "Федор",
"cardNumber": null,
"phoneCode": "+7",
"phone": "9001112233",
"email": "example@ytimes.ru"
},
"itemList": [{
"guid": "34c469aa-9af5-419b-804e-4c058f57cd10",
"menuItemGuid": "3b116056-cf43-458c-ad31-061ca8515dbe",
"menuTypeGuid": "55414544-ec41-4f93-94e8-ebeb2c8c9ea2",
"supplementList": {
"81b18bc4-4b21-4dfe-9bf5-94daaa36ca08": 1,
"d269fcad-ae48-11f0-85c7-0242ac140004": 2
},
"priceWithDiscount": 390.0,
"quantity": 2
},
{
"guid": "79cf2717-3d77-4e37-a5e5-1d28d0adefb8",
"menuItemGuid": "5abee2cf-db86-4b05-9a93-24def174c88b",
"priceWithDiscount": 110.0,
"quantity": 1
}],
"comment": "Пример комментария к заказу",
"paidValue": 890.0,
"printFiscalCheck": false,
"printFiscalCheckEmail": null
}
],
"error": null
}
POST https://api.ytimes.ru/ex/order/save
Позволяет отправить в систему заказ из внешнего источника: своего приложения, сайта, агрегатора.
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Уникальный идентификатор заказа (https://ru.wikipedia.org/wiki/UUID). Используется в качестве ключа идемпотентности. Вы на своей стороне генерируете UUID, передаете его в заказе. Заказ с одним и тем же UUID второй раз не будет создаваться. |
| shopGuid | string | Идентификатор торговой точки, в которой нужно создать заказ |
| type | string | Тип заказа. Поддерживаются значения: TOGO (на вынос), IN (в зале), DELIVERY (доставка), PRE_ORDER (предзаказ) |
| client | OrderClient | Данные гостя, кто сделал заказ |
| itemList | OrderItemRecord[] | Список заказанных позиций |
| comboList | OrderComboRecord[] | Список заказанных комбо-наборов |
| comment | string | Комментарий к заказу |
| paidValue | double | Сумма оплаты по заказу. Если заказ оплачен, сумма должна соответствовать сумме стоимостей заказанных позиций. Если заказ не оплачен, передается null (будет означать, что заказ нужно будет оплатить при получении на кассе). |
| printFiscalCheck | boolean | Печатать или нет фискальный чек на кассе в торговой точке (при приеме заказа) |
| printFiscalCheckEmail | string | Указание email, куда направляется чек в случае печати на кассе в торговой точке |
OrderClient
Данные гостя. Если гость делает заказ впервые, его анкета создастся в базе гостей. Обратите внимание, что нужно получить от гостя согласие на обработку персональных данныех.
| Поле | Тип | Описание |
|---|---|---|
| name | string | Имя гостя |
| cardNumber | long | Номер скидочной карты гостя, если используется |
| phoneCode | string | Код страны телефона гостя (+7 для РФ) |
| phone | string | Телефон гостя (только цифры, следующие после кода страны. Например 9001112233) |
| string | Email гостя |
OrderItemRecord
Данные позиции меню. В заказе может быть от 1 до 100 позиций.
| Поле | Тип | Описание |
|---|---|---|
| menuItemGuid | string | Идентификатор пункта меню |
| menuTypeGuid | string | Только для меню с типом RECIPE. Идентификатор варианта порции, например размер Капучино. |
| supplementList | map |
Идентификаторы добавок (модификаторов и их количество). В примере выбрано овсяное молоко - 1шт и сахар - 2шт |
| priceWithDiscount | double | Цена за 1 штуку с учетом всех скидок и наценок |
| quantity | long | Количество заказанных единиц |
OrderComboRecord
Специальные поля для передачи в заказе данных комбо-наборов
| Поле | Тип | Описание |
|---|---|---|
| comboGuid | string | Идентификатор комбо-набора из меню |
| comboItemList | OrderComboItemRecord[] | Перечисление выбранных позиций комбо |
| priceWithDiscount | double | Итоговая цена комбо |
| quantity | long | Количество заказанных единиц |
OrderComboItemRecord
Описывает позицию комбо. Например, для кофе + десерт со скидкой в комбо будет 2 позции (выбранный кофе и выбранный десерт)
| Поле | Тип | Описание |
|---|---|---|
| menuItemGuid | string | Идентификатор пункта меню |
| menuTypeGuid | string | Только для меню с типом RECIPE. Идентификатор варианта порции, например размер Капучино. |
| supplementList | map |
Идентификаторы добавок (модификаторов и их количество) |
В ответ возвращается та же структура и статус CREATED. В приложении кассира появится окошко заказа. Кассир должен или принять заказ или отклонить его.

Если заказ не появляется, на точке необходимо проверить настройку:

Вебхук: Статус принятия заказа кассиром
Пример JSON запроса
{
"eventId": "043d2453-af09-11f0-85c7-0242ac140004",
"guid" : "885188cd-d0ee-4444-919e-4f063359dff7",
"status" : "CANCELLED",
"statusMessage" : "Отсутствуют позиции в наличие"
}
Пример ответа вашего сервера:
OK
Позволяет получить на свой сервер информацию по статусу принятия заказа кассиром (принят или отклонен).
POST {your remote address}
Адрес вашего сервиса, на который будет отправляться запрос, указывается в настройках интеграции в разделе Webhook API в поле "Статус заказа, созданного по API".
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| eventId | string | Уникальный идентификатор события принятия заказа. |
| guid | string | Уникальный идентификатор заказа. |
| status | string | Статус заказа: ACCEPTED (принят) или CANCELLED (отклонен) |
| statusMessage | string | Дополнительная информация по статусу. В случае отклонения заказа тут передается причина, которую укажет кассир. |
В ответ ваш сервер должен вернуть код 200 и текст OK, что будет считаться успешным выполнением запроса.
Продажи
Получение истории продаж
Получение истории смен
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"dateFrom": "01.01.2024",
"dateTo": "31.01.2024",
"shopGuid": "8bef430b-3aad-42e3-83d7-81a3f8782574"
}' \
https://api.ytimes.ru/ex/order/list?page=1
Пример ответа
{
"success": true,
"count": 2,
"rows": [
{
"guid": "e9a13ec1-6f69-4c24-9d3f-39eb25ead437-1705509830777",
"checkNum": 1,
"isDeleted": false,
"shiftDate": "17.01.2024",
"shiftNum": 1,
"userId": 59851,
"userName": "Петров И.О.",
"tableStaffId": null,
"tableStaffName": null,
"startDateTime": "17.01.2024 19:43:50",
"endDateTime": "17.01.2024 19:44:05",
"personList": [
{
"guid": "20270cf9-c57d-4cb4-b813-9b099211c3da-1705509831890",
"isDeleted": false,
"name": "Гость 1",
"card": null,
"orderList": [
{
"guid": "6bea17a5-034c-4fc7-a389-da83f0ea7c6a-1705509842325",
"isDeleted": false,
"number": 1,
"createdUserId": 59851,
"createdDateTime": "17.01.2024 19:44:05",
"completedDateTime": "17.01.2024 19:44:05",
"canceledDateTime": null,
"menuType": "RECIPE",
"menuItemName": "Американо",
"menuTypeName": "250мл с собой",
"menuOrderType": "TOGO",
"supplementText": null,
"itemPrice": 150.0,
"discountValue": 0.0,
"discountPercent": 0,
"priceWithDiscount": 150.0,
"manualPriceWithDiscount": null,
"selfPrice": 47.296,
"usedPoints": 0.0,
"addPoints": null,
"orderPromoNum": null,
"source": null
},
{
"guid": "7684ab43-8afe-4056-a6bd-db6856492042-1705913663246",
"isDeleted": false,
"number": 1,
"createdUserId": 59851,
"createdDateTime": "22.01.2024 11:54:30",
"completedDateTime": "22.01.2024 11:54:30",
"canceledDateTime": null,
"menuType": "RECIPE",
"menuItemName": "Хот-дог классический",
"menuTypeName": "Порция с собой",
"menuOrderType": "TOGO",
"supplementText": null,
"itemPrice": 150.0,
"discountValue": 0.0,
"discountPercent": 0,
"priceWithDiscount": 150.0,
"manualPriceWithDiscount": null,
"selfPrice": 0.0,
"usedPoints": 0.0,
"addPoints": null,
"orderPromoNum": null,
"source": null
}
],
"totalUsedPoints": 0.0,
"comment": null
}
],
"paymentCreditValue": 300.0,
"paymentCashValue": 0.0,
"paymentTypeSettingsId": null,
"paymentTypeValue": null
},
{
"guid": "a6c872f4-0664-4d60-aebc-7dfac9fb9e9b-1705916841777",
"checkNum": 1,
"isDeleted": false,
"shiftDate": "22.01.2024",
"shiftNum": 1,
"userId": 59851,
"userName": "Петров И.О.",
"tableStaffId": null,
"tableStaffName": null,
"startDateTime": "22.01.2024 12:47:25",
"endDateTime": "22.01.2024 12:47:33",
"personList": [
{
"guid": "e3651d31-1465-46c4-9bf6-880e6f18d7e8-1705916842805",
"isDeleted": false,
"name": "Гость 1",
"card": null,
"orderList": [
{
"guid": "57a831bd-b5f7-470c-94b6-d7504c863b26-1705916844432",
"isDeleted": false,
"number": 1,
"createdUserId": 59851,
"createdDateTime": "22.01.2024 12:47:33",
"completedDateTime": "22.01.2024 12:47:33",
"canceledDateTime": null,
"menuType": "OTHER_SERVICE",
"menuItemName": "Доставка до двери",
"menuTypeName": null,
"menuOrderType": null,
"supplementText": null,
"itemPrice": 399.0,
"discountValue": 0.0,
"discountPercent": 0,
"priceWithDiscount": 399.0,
"manualPriceWithDiscount": null,
"selfPrice": 0.0,
"usedPoints": 0.0,
"addPoints": null,
"orderPromoNum": null,
"source": null
},
{
"guid": "a5753834-fb5d-4b66-9354-a12f93922968-1705916845312",
"isDeleted": false,
"number": 3,
"createdUserId": 59851,
"createdDateTime": "22.01.2024 12:47:33",
"completedDateTime": "22.01.2024 12:47:33",
"canceledDateTime": null,
"menuType": "GOODS",
"menuItemName": "Кофе 150.0 гр",
"menuTypeName": null,
"menuOrderType": null,
"supplementText": null,
"itemPrice": 125.0,
"discountValue": 0.0,
"discountPercent": 0,
"priceWithDiscount": 125.0,
"manualPriceWithDiscount": null,
"selfPrice": 294.72,
"usedPoints": 0.0,
"addPoints": null,
"orderPromoNum": null,
"source": null
}
],
"totalUsedPoints": 0.0,
"comment": null
}
],
"paymentCreditValue": 697.0,
"paymentCashValue": 0.0,
"paymentTypeSettingsId": null,
"paymentTypeValue": null
}
],
"error": null
}
POST https://api.ytimes.ru/ex/order/list
Позволяет получить список всех продаж на точке за указанный период времени (всех заказов, которые созданы как через API, так и заведены кассиром вручную).
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| page | int | Номер страницы результата. На одной странице отображается не более 100 записей. По умолчанию запрашивается страница 1. |
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой запрашиваются данные |
| dateFrom | string | Начало диапазона дат, за который нужно получить данные. Формат ДД.ММ.ГГГГ. |
| dateTo | string | Конец диапазона дат, за который нужно получить данные. Формат ДД.ММ.ГГГГ. |
Формат ответа:
В ответ приходит список продаж (заказов). Продажа может быть разбита на несколько персон (например в случае если заказ делала большая компания). Заказанные позиции указаны у каждой персоны свои. В продаже присутствует хотя бы 1 персона, список заказанных позиций может быть пустым.
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор продажи |
| isDeleted | boolean | Удалена продажа или нет |
| checkNum | long | Номер продажи внутри смены, начиная с 1 (номер в некоторых ситуациях может дублироваться) |
| shiftDate | string | Дата смены, в рамках которой создан заказ |
| shiftNum | long | Номер смены, в рамках которой создан заказ |
| userId | long | Идентификатор кассира, кто создал заказ |
| userName | string | Имя кассира, кто создал заказ |
| tableStaffId | long | Идентификатор официанта, указанного в заказе |
| tableStaffName | string | Имя официанта, указанного в заказе |
| startDateTime | string | Дата и время создания (открытия) продажи, формат ДД.ММ.ГГГГ ЧЧ:ММ:СС |
| endDateTime | string | Дата и время закрытия продажи, формат ДД.ММ.ГГГГ ЧЧ:ММ:СС |
| personList | OrderPersonRecord[] | Список персон, указанных в продаже |
| paymentCreditValue | double | Сумма оплаты безналичными |
| paymentCashValue | double | Сумма оплаты наличными |
| paymentTypeSettingsId | long | Идентификатор дополнительного метода оплаты, если использовался |
| paymentTypeValue | double | Сумма оплаты дополнительным методом оплаты, если использовался |
OrderPersonRecord
Данные персоны
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор персоны |
| isDeleted | boolean | Удалена персона из продажи или нет |
| name | string | Имя персоны |
| card | OrderPersonCardRecord | Данные карты гостя, указанной для персоны |
| orderList | OrderItemRecord[] | Список позиций, которые заказаны на данную персону |
| totalUsedPoints | double | Кол-во бонусов, которые списаны для персоны |
| comment | string | Комментарий, который указан для персоны |
OrderPersonCardRecord
Данные скидочной карты гостя.
| Поле | Тип | Описание |
|---|---|---|
| number | long | Номер скидочной карты гостя, если используется |
| name | string | Имя гостя |
| surname | string | Фамилия гостя |
| phoneCode | string | Код страны телефона гостя (+7 для РФ) |
| phone | string | Телефон гостя (только цифры, следующие после кода страны. Например 9001112233) |
OrderItemRecord
Позиция чека для персоны
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор созданной позиции |
| isDeleted | boolean | Удален заказ или нет |
| number | long | Порядковый номер позиции внутри продажи для персоны (начиная с 1) |
| createdUserId | long | Идентификатор кассира, который добавил позицию |
| createdDateTime | string | Дата и время добавления позиции, формат ДД.ММ.ГГГГ ЧЧ:ММ:СС |
| completedDateTime | string | Дата и время приготовления позиции, формат ДД.ММ.ГГГГ ЧЧ:ММ:СС |
| canceledDateTime | string | Дата и время удаления позиции, если она удалена, формат ДД.ММ.ГГГГ ЧЧ:ММ:СС |
| menuType | string | Тип позиции (см. раздел пунктов меню) |
| menuItemName | string | Наименование позиции |
| menuTypeName | string | Наименование варианта порции |
| menuOrderType | string | Тип заказа (TOGO - с собой, IN - в зале) |
| supplementText | string | Краткое перечисление модификаторов, если указаны |
| itemPrice | double | Цена позиции без скидки |
| discountValue | double | Скидка на позицию в абсолютном значении |
| discountPercent | double | Скидка на позицию в процентах |
| priceWithDiscount | double | Рассчитанная итоговая цена со скидкой |
| manualPriceWithDiscount | double | Цена со скидкой, указанная сотрудником вручную. Если указана, используется вместо priceWithDiscount |
| selfPrice | double | Себестоимость позиции (появляется только после того как позиция отмечается приготовленной) |
| usedPoints | double | Использованные на позицию бонусы (применяются к priceWithDiscount) |
| addPoints | double | Начисленные на позицию бонусы (применяются к priceWithDiscount) |
| orderPromoNum | double | Номер заказа по акции (например номер кофе в акции "Каждый 7-й кофе в подарок") |
| source | string | Источник позиции (TABLET - позицию добавили с приложения кассира) |
Кассовые смены
Получение истории смен
Получение истории смен
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"dateFrom": "01.01.2024",
"dateTo": "31.01.2024",
"shopGuid": "8bef430b-3aad-42e3-83d7-81a3f8782574"
}' \
https://api.ytimes.ru/ex/shift/list?page=1
Пример ответа
{
"success": true,
"count": 2,
"rows": [
{
"guid": "3c43ecde-1566-47d9-be1f-e6f69b952d23-1705912225146",
"shopGuid": "8bef430b-3aad-42e3-83d7-81a3f8782574",
"date": "22.01.2024",
"number": 1,
"startDate": "22.01.2024",
"startTime": "11:30",
"endDate": "02.02.2024",
"endTime": "21:08",
"userList": [
{
"id": 59851,
"start": "22.01.2024 11:30:29",
"end": "02.02.2024 21:08:15"
}
],
"cashStartValue": 0.0,
"cashCheckValue": 27.0,
"cashChangeIncome": 0.0,
"cashChangeOutcome": 0.0,
"cashEndValue": 0.0,
"cashEndExpected": 27.0,
"cashEndResult": 27.0,
"creditValueByReport": 3325.0,
"creditCheckValue": 3325.0,
"creditEndResult": 0.0,
"otherCheckValue": [{
"id": 23423,
"name": "Яндекс.Пэй",
"value": 4530
}]
},
{
"guid": "46044039-fee1-48fa-ad2c-94d45f2852af-1705509823102",
"shopGuid": "8bef430b-3aad-42e3-83d7-81a3f8782574",
"date": "17.01.2024",
"number": 1,
"startDate": "17.01.2024",
"startTime": "19:43",
"endDate": "22.01.2024",
"endTime": "10:59",
"userList": [
{
"id": 59851,
"start": "17.01.2024 19:43:43",
"end": "22.01.2024 10:59:30"
}
],
"cashStartValue": 0.0,
"cashCheckValue": 0.0,
"cashChangeIncome": 0.0,
"cashChangeOutcome": 0.0,
"cashEndValue": 0.0,
"cashEndExpected": 0.0,
"cashEndResult": 0.0,
"creditValueByReport": 150.0,
"creditCheckValue": 150.0,
"creditEndResult": 0.0,
"otherCheckValue": []
}
],
"error": null
}
POST https://api.ytimes.ru/ex/shift/list
Позволяет получить информацию о сменах, выручке смены и рабочем времени сотрудников.
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| page | int | Номер страницы результата. На одной странице отображается не более 100 записей. По умолчанию запрашивается страница 1. |
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой запрашиваются данные |
| dateFrom | string | Начало диапазона дат, за который нужно получить данные. Формат ДД.ММ.ГГГГ. |
| dateTo | string | Конец диапазона дат, за который нужно получить данные. Формат ДД.ММ.ГГГГ. |
Формат ответа:
В ответ приходит список смен
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор смены |
| shopGuid | string | Идентификатор торговой точки |
| date | string | Дата смены |
| number | long | Номер смены в течение рабочего дня |
| startDate | string | Дата открытия смены, формат ДД.ММ.ГГГГ |
| startTime | string | Время открытия смены, формат ЧЧ:ММ:СС |
| endDate | string | Дата закрытия смены, формат ДД.ММ.ГГГГ |
| endTime | string | Время закрытия смены, формат ЧЧ:ММ:СС |
| userList | ShiftUserRecord[] | Список сотрудников, указанных в смене и их рабочее время. |
| cashStartValue | double | Сумма наличных в кассе на момент открытия смены (задается кассиром при открытии смены) |
| cashCheckValue | double | Сумма выручки наличными по данным продаж в программе |
| cashChangeIncome | double | Сумма внесений наличных |
| cashChangeOutcome | double | Сумма изъятий наличных |
| cashEndExpected | double | Ожидаемая сумма наличных в кассе с учетом суммы на начала, продаж, изъятий и внесений. |
| cashEndValue | double | Фактическая сумма наличных в кассе на момент закрытия смены (задается кассиром при закрытии смены) |
| cashEndResult | double | Сумма недостачи наличных в кассе относительно ожидаемого значения (отрицательная сумма означает лишнюю сумму в кассе относительно ожидаемой). |
| creditCheckValue | double | Выручка безналичными по данным продаж |
| creditValueByReport | double | Выручка безналичными по данным отчета банковского терминала (заполняется кассиром в конце смены) |
| creditEndResult | double | Сумма недостачи безналичными в программе относительно данных банковского терминала (отрицательная сумма означает лишнюю сумму безналичными в банковском терминале относительно программы) |
| otherCheckValue | ShiftPaymentValueRecord[] | Данные по выручке дополнительными методами оплаты |
ShiftUserRecord
| Поле | Тип | Описание |
|---|---|---|
| id | long | Идентификатор смены |
| shopGuid | string | Идентификатор сотрудника |
| start | string | Начало рабочего времени сотрудника, формат ДД.ММ.ГГГГ ЧЧ:ММ:СС |
| end | string | Конец рабочего времени сотрудника, формат ДД.ММ.ГГГГ ЧЧ:ММ:СС |
ShiftPaymentValueRecord
| Поле | Тип | Описание |
|---|---|---|
| id | long | Идентификатор дополнительного метода оплаты |
| name | string | Наименование дополнительного метода оплаты |
| value | double | Сумма дополнительного метода оплаты |
Расходы
Получение списка категорий
Получение списка категорий
curl -H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
https://api.ytimes.ru/ex/finance/outcome/category/list
Пример ответа
{
"success": true,
"count": 4,
"rows": [
{
"guid": "5f7e0431-c9f6-11f0-af6a-0242ac120007",
"name": "Зарплата",
"parentGuid": null,
"isAvailableInShift": true,
"type": "PRODUCTION_VARIABLE "
},
{
"guid": "5f7e0472-c9f6-11f0-af6a-0242ac120007",
"name": "Телефон/Интернет",
"parentGuid": null,
"isAvailableInShift": true,
"type": "PRODUCTION_REGULAR"
},
{
"guid": "5f85ce9e-c9f6-11f0-af6a-0242ac120007",
"name": "Аренда",
"parentGuid": null,
"isAvailableInShift": false,
"type": "PRODUCTION_REGULAR"
},
{
"guid": "5f85cf53-c9f6-11f0-af6a-0242ac120007",
"name": "Реклама",
"parentGuid": null,
"isAvailableInShift": true,
"type": "COMMERCIAL"
}
],
"error": null
}
GET https://api.ytimes.ru/ex/finance/outcome/category/list
Список возможных категорий расходов (нетоварных), заданных в аккаунте.
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор категории расхода |
| name | string | Наименование категории расхода |
| parentGuid | string | Идентификатор родительской категории расходов, если категории вложены друг в друга |
| isAvailableInShift | boolean | Доступна ли категория сотрудникам смены в приложении кассира для указания расхода по данной категории |
| type | string | Тип категории расхода для построения финансового отчета. Доступные варианты: PRODUCTION_VARIABLE (Переменные производтвенные), PRODUCTION_REGULAR (Постоянные производственные), COMMERCIAL (Коммерческие), ADMINISTRATIVE (Административные), TAX (Налоговые), CREDIT (Кредиты), DEPRECIATION (Амортизация) |
Получение истории расходов
Получение истории расходов
curl -X POST \
-H 'Accept: application/json;charset=UTF-8' \
-H 'Content-Type: application/json;charset=UTF-8' \
-H 'Authorization: YOUR KEY' \
-d ' {
"shopGuid": "46b9eaa1-e594-4af3-a203-35d5a8f9cec0",
"dateFrom": "01.01.2025",
"dateTo": "31.03.2025"
}' \
https://api.ytimes.ru/ex/finance/outcome/group/list?page=1
Пример ответа
{
"success": true,
"count": 1,
"rows": [
{
"guid": "9127dca8-6c58-469b-a407-b4cec13dacbd-1764096046281",
"revision": 1,
"date": "16.02.2025",
"time": "22:40:46",
"comment": "комментарий к документу",
"supplierGuid": "b0251531-27c4-4fc8-aa83-62a21ca730b6",
"docDate": "14.02.2025",
"docNumber": "123",
"docPayDate": "14.11.2025",
"docPayType": "BANK",
"userGuid": "e8246465-addd-4130-93c1-82258e1801a1",
"itemList": [
{
"guid": "c3d6c420-d276-4b97-b594-20aa2dabc4a7-1764096046281",
"categoryGuid": "5f85cf53-c9f6-11f0-af6a-0242ac120007",
"categoryName": "Реклама",
"price": 15000.0,
"comment": "комментарий к позиции документа"
},
{
"guid": "abdec4b2-4b21-4a3b-b481-aaf3a623af8b-1764096094382",
"categoryGuid": "5f85cf53-c9f6-11f0-af6a-0242ac120007",
"categoryName": "Реклама",
"price": 20000.0,
"comment": null
}
]
}
],
"error": null
}
POST https://api.ytimes.ru/ex/finance/outcome/group/list
Возвращает историю расходов за заданный период на указанной торговой точке. Только нетоварные расходы. Расходы на закупку товаров формируются в разделе движения товаров по складу.
Параметры запроса:
| Поле | Тип | Описание |
|---|---|---|
| page | int | Номер страницы результата. На одной странице отображается не более 100 записей. По умолчанию запрашивается страница 1. |
Тело запроса (JSON):
| Поле | Тип | Описание |
|---|---|---|
| shopGuid | string | Идентификатор торговой точки, для которой запрашиваются данные |
| dateFrom | string | Начало диапазона дат, за который нужно получить данные. Формат ДД.ММ.ГГГГ. |
| dateTo | string | Конец диапазона дат, за который нужно получить данные. Формат ДД.ММ.ГГГГ. |
Формат ответа:
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор документа |
| revision | long | Номер изменения документа |
| date | string | Дата расхода (от неё зависит, на какой период попадет расход в финансовом отчете), формат ДД.ММ.ГГГГ |
| time | string | Время расхода (от него зависит, на какой период попадет расход в финансовом отчете), формат ЧЧ:ММ:СС |
| comment | string | Комментарий к документу |
| supplierGuid | string | Идентификатор поставщика, если указан |
| docDate | string | Дата документа (накладной, УПД, чека), по которому заполнен расход, формат ДД.ММ.ГГГГ |
| docNumber | string | Номер документа (накладной, УПД, чека), по которому заполнен расход |
| docPayDate | string | Дата фактической оплаты расхода, формат ДД.ММ.ГГГГ |
| docPayType | string | Тип фактической оплаты расхода. BANK - оплата безналичными, CASH - наличными из кассы |
| userGuid | string | Идентификатор сотрудника, создавшего расход |
| itemList | OutcomeItem[] | Список позиций документа |
OutcomeItem
Позиция документа расхода
| Поле | Тип | Описание |
|---|---|---|
| guid | string | Идентификатор позиции |
| categoryGuid | string | Идентификатор категории расхода |
| categoryName | string | Наименование категории расхода |
| price | double | Сумма расхода |
| comment | string | Комментарий к позиции расхода |
База гостей
HTTP коды ответов
| Код ошибки | Описание |
|---|---|
| 400 | Bad Request -- передан неправильный запрос. |
| 401 | Unauthorized -- ключ аутентификации некорректный. |
| 403 | Forbidden -- нет доступа к запрошенному ресурсу (проверить права, прописанные для вашего ключа). |
| 404 | Not Found -- запрос несуществующего адреса. |
| 405 | Method Not Allowed -- вы отправляете GET-запрос, в то время когда сервер ожидает POST или наоборот. |
| 429 | Too Many Requests -- вы посылаете слишком много запросов |
| 500 | Внутренняя ошибка сервиса |
