NAV
YTimes API
cURL

Начало работы с 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 соц сети
email 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)
email 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)
email 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". Определяет значение скидки на позицию комбо.

Как считается цена на комбо:

  1. Для комбо нужно посчитать цену продажи только если isCalcPrice = true.

  2. Для каждой позиции комбо считаем цену продажи и суммируем. Например:

Итого сумма всех позиций (а значит цена комбо) равна 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, что будет считаться успешным выполнением запроса.

Заказы

Общие концепции

Заказ состоит из одной или нескольких позиций. Каждая позиция - это блюда/напитки (тех карты), товары со склада или услуги. Если позиция является блюдом/напитком (тех картой), то так же указывается вариант порции этого блюда и дополнительные модификаторы (например, вариант молока к кофе).

Цены в заказе можно передавать свои, отличающиеся от цен в меню в системе.

С доставкой мы пока не работаем, поэтому:

  1. У заказов нет статусов по типу "в процессе приготовления", "готов", "доставляется" и т.п.. Заказ создается в системе и единственное что можно получить - это принят заказ кассиром или отклонен (итого есть 3 состояния: создан, принят кассиром, отклонен кассиром).
  2. Нет дополнительных полей для указания адресов доставки. Адрес и дополнительную информацию в случае необходимости нужно передавать в поле 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)
email 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 Внутренняя ошибка сервиса