Кактус: для разработчиков

Адрес API: https://app.kak2c.ru/ Адрес API тестового контура: https://app-test.kak2c.ru/

Базовая схема интеграции с Кактусом

Ниже представлен план запуска нового клиента

Screenshot_5.png

Screenshot_6.png

 
Схема движения товара

Screenshot_12.png

 
Общая схема интеграции
План действий для запуска нового клиента по API

Ниже описан поэтапный план запуска клиента по руководству для разработчика:

1. Создание аккаунта в Кактусе
https://lk.kak2c.ru/sign_up

2. Авторизация в API
Основной раздел "Авторизация"
Инструкция "/api/lite/auth"

3. Синхронизация номенклатуры
Инструкция "Запрос списка продуктов" (/api/lite/products)

4. Настройка вызова тарификатора и списка ПВЗ
Инструкция "Расчет тарифа" (/api/dlv/tariffs)
Инструкция "Список постоматов / ПВЗ (/api/dlv/delivery_points)

5. Расчет ориентировочных суммарных габаритов для заказа более чем с 1 вложимым
Инструкция "Получение габаритов условного минимального упакованного места"
или
Инструкция "Получение габаритов упаковки товаров по перечню параметров упаковок"

6. Карта ПВЗ
Если требуется вывод ПВЗ на карту на сайте - можно воспользоваться нашим компонентом:
Инструкция "Карта ПВЗ"

7. Настройка выгрузки поставок и мониторинг их статусов
Инструкция "Запрос списка поставок на склад (заказов поставщиков)"
Мониторинг статусов удобнее делать с использованием метки изменений: updated_from

Инструкция "Подтверждение поставки для ее выгрузки на склад"

8. Настройка выгрузки заказов и мониторинг их статусов
Инструкция "Запрос списка заказов"
Мониторинг статусов удобнее делать с использованием метки изменений: updated_from

Screenshot_4.png

Варианты интеграции с сайтом (подключение собственного интернет-магазина)

Варианты расположены по степени сложности - от самого простого до самого сложного (и более гибкого) варианта

  Создание сайта Интерфейс каталога товаров Загрузка товаров в кактус Корзина Выгрузка заказов в кактус
1. Создание сайта используя витрину "Кактус"

 

image-1593172124926.png

 

Сайт делается на витрине "Кактус" без помощи программиста

 

image-1593172124926.png

 

Каталог товаров уже интегрирован с "Кактус"

 

image-1593172124926.png

 

Товары изначально создаются в "Кактус"

 

image-1593172124926.png

 

Умная корзина уже интегрирована

 

image-1593172124926.png

 

Заказы автоматически выгружаются в "Кактус"

2. Создание сайта на CMS (к примеру Wordpress/Bitrix/Tilda) и вставка каталога "Кактус" через IFrame

 

image-1593172186291.png

 

Сайт делается программистом на CMS

 

image-1593172124926.png

 

Каталог товаров уже интегрирован с "Кактус"

 

image-1593172124926.png

 

Товары изначально создаются в "Кактус"

 

image-1593172124926.png

 

Умная корзина уже интегрирована

 

image-1593172124926.png

 

Заказы автоматически выгружаются в "Кактус"

3. Создание сайта на CMS (к примеру Wordpress/Bitrix/Tilda)  и подключение умной корзины "Кактус"

 

image-1593172186291.png

 

Сайт делается программистом на CMS

 

image-1593172186291.png

 

 

Каталог товаров необходимо верстать в CMS

 

image-1593172186291.png

 

Товары необходимо заполнять как в CMS, так и в "Кактус"

 

image-1593172124926.png

 

Умная корзина легко интегрируется в сайт

 

image-1593172124926.png

 

Заказы автоматически выгружаются в "Кактус"

4. Создание сайта на CMS (к примеру Wordpress/Bitrix)  без подключения умной корзины

 

image-1593172186291.png

 

Сайт делается программистом на CMS

 

image-1593172186291.png

 

Каталог товаров необходимо верстать в CMS

 

image-1593172186291.png

 

Товары необходимо заполнять как в CMS, так и в "Кактус"

 

image-1593172186291.png

 

Необходимо настроить своё оформление заказа, которое затем разработчик должен подключить по API тарификации

 

image-1593172186291.png

 

Необходимо настроить выгрузку заказов в "Кактус"

 

Виджет корзины

Виджет корзины

Руководство для разработчиков виджета корзины

Инициализация корзины:

<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">

<script>
  document.addEventListener("DOMContentLoaded", function (){
	var kak2c_domain = "shopXXXXXX"; //	Укажите здесь Ваш идентификатор магазина
    
    //Необязательные обработчики событий корзины. Могут использоваться например для генерации событий аналитики, вывода сообщений пользователю 
    //типа "товар добавлен в корзину" и т.п.
    document.addEventListener("kaktusEvent", function (e){
		//Здесь можно обработать любые изменения набора товаров в корзине, выбора доставки и т.п. Например вывести количество и сумму покупки в 
      	//свою кастомную иконку корзины и это количество и сумма будут изменяться при любых действиях пользователя с корзиной.
      	var cart = kaktusWidget.getCart();
      	console.log(cart.items); //Получение товаров в корзине
        console.log(cart.promocode); //Получение учтенного в цене заказа валидного промокода
      	//...
      
      	//Для обработки более специфичных событий, например отдельно только добавления товара в корзину, можно анализировать вид события: e.detail.type

		//Добавление товара в корзину. Не важно - добавление нового или же увеличение количество уже существующего
		if (e.detail.type == 'cart_item_add') {
			//В e.detail.content.fromOutsidePopup содержится булево занчение, указывающее что товар был добавлен в корзину не при помощи 
          	//кнопок "+" и "-" внутри попапа корзины. Может быть полезен поскольку сообщение "товар добавлен в корзину" не надо выводить, 
          	//когда корзина уже открыта.
            //Данные добавляемого товара (включая добавленное количество) находятся в e.detail.content.item. 
          	//e.detail.content.item.count - количество, добавленное за данную операцию, а не всего в корзине
		}
  
      	//удаление товара из корзины. Кнопкой удаления или клавишей минус. Не важно, удален ли товар или только уменьшено его количество.
        if (e.detail.type == 'cart_item_removed') {
          //Данные события аналогичны cart_item_add
        }
      
      	//Другие события:
        //init_complete - корзина инициализирована
      
        //item_removed - удаление товара из корзины. Выполнятеся вместе с cart_item_removed, но только в том случае если товар полностью удален, 
      	//а не только уменьшено количество
      
 		//order_created - создан заказ
	});
    
    //Собственно инициализация виджета корзины
    kaktusWidget({
      	domain: kak2c_domain,
      
      	//Если это значение указано, корзина будет работать не с продакшн, а с тестовым сервером Кактус. При создании аккаунта на продакшн,
        //на тестовом одноименный аккаунт автоматически не создается. Это надо учитывать при указании domain совместно с ключем host
      	host: '//app-test.kak2c.ru',
      
      	//Необязательные значения по умолчанию
      	default: {
          city: 'Москва', // выбранный город доставки по умолчанию
          promocode: 'promocodeName' // промокод, который будет применяться по умолчанию
        },
      
      	//Необязательные коллбэки. Назначение похоже на события выше.
      	basketClickCallback: function(){
          //Вызывается при открытии попапа корзины
        },

        newOrderCreatedCallback: function(){
          //Вызывается при создании заказа
        }
    });
    	
  };
</script>

Добавление или удаление товар из корзины:

kaktusWidget.changeCart({
	variantId: 12345, //ID варианта товара. Можно посмотреть в ЛК2. Если у товара не задано несколько вариантов id единственного варианта будет равен id товара.
  	//variantExtId: 'AB123CD', - можно указать вместо variantId. Тогда поиск варианта товара будет выполняться не по id а по полю "Внешинй Id". 
  	//которому в ЛК можно задать любое произвольное значение. Например указать его равным артикулу товара. И таким образом реализовать добавление товара по артикулу.
	count: 1, //Количество добавляемых или удаляемых товаров
	operation: 'ADD' //или 'DELETE' 
});

Автоматическое добавление промокода:

kaktusWidget.setDefaultPromocode('promocodeName'); // 'promocodeName' заменить на имя промокода

Примером использования событий и коллбэков корзины может служить работа с аналитикой.

Визуальная настройка иконки корзины описана здесь.

Полная замена иконки корзины на кастомную. Тоже может служить примером работы с событиями для обновления количества товаров в кастомной корзине, а также вывода сообщения "товар добавлен в корзину".

 

Виджет корзины

Настройка Google Analytics и Yandex Metrica для корзины

Базовая настройка аналитики:

kaktusWidget({
	domain: kak2c_domain,
            
	basketClickCallback: function(){
    	//События аналитики при открытии корзины
      	yaCounter53862778.reachGoal('checkout_started');
      	gtag('event', 'checkout_started', {
        	'event_category' : 'ecommerce'
      	});
    },
 
    newOrderCreatedCallback: function(){
        //События аналитики при формированиии заказа
        var goalParams = {
          order_price: kaktusWidget.totalSum,
          currency: "RUB"
        }
        yaCounter53862778.reachGoal('checkout_finished', goalParams);
        gtag('event', 'checkout_finished', {
          'event_category' : 'ecommerce'
        });
    },
 });

dataLayer для расширенной электронной торговли Google Analytics совместно с Google Tag Manager корзина формирует автоматически. Также использование этого dataLayer можно настроить в Яндекс.Метрике: https://yandex.ru/support/metrica/data/e-commerce.html . Если к Вашей странице не подключена библиотека gtm.js и не настроен данный режим Яндекс.Метрики, это не на что не влияет. Однако если Вы собираетесь формировать эти события вручную, данный автоматический функционал можно отключить. Для этого при инициализации kaktusWidget укажите параметр enableDataLayer: false;

Кроме описанных выше событий открытия корзины и формирования заказа также можно использовать события добавления и удаления товаров в корзину. Для этого перед инициализацией виджета корзины добавьте следующий код:

document.addEventListener("kaktusEvent", function (e){
  if (e.detail.type == 'cart_item_add') {
    //Добавление товара в корзину. Данные добавляемого товара (включая добавленное количество) находятся в e.detail.content.item
  }
  
  if (e.detail.type == 'cart_item_removed') {
    //Удаление товара из корзины. Данные товара (включая удаляемое количество) находятся в e.detail.content.item
  }
});

В таком же обработчике событий можно реализовать более продвинутую google аналитику при оформлении заказа, которая передает не только сам факт покупки но и всю информацию о товарах в заказе. Для этого перед инициализацией виджета добавьте следующий код

document.addEventListener("kaktusEvent", function (e){
  //создан заказ
  if (e.detail.type == 'order_created') {
    var content = e.detail.content;
    var cart = kaktusWidget.getCart();

    var items = cart.items.map(function (item) {
      return {
        "id": item.productId,
        "name": item.name,
        "price": item.price,
        "quantity": item.count,
        "brand": item.brandName,
      }
    });

    var tansaction = {
      "transaction_id": content.orderId,
      "value": content.totalOrderSum,
      "currency": "RUB",
      "items": items,
    }
    gtag('event', 'purchase', tansaction);
  }
});
Виджет корзины

Стилизация корзины

Иконка корзины имеет следующую структуру

<div className="basket-round">
	<span className="basket-count">1</span>
    <span className="basket-money">1234 ₽</span>
</div>

где

Задавая стили для этих классов в файле css Вашего сайта можно изменить внешний вид корзины. Например заменить цвет иконки корзины с черного на зеленый, а кружочек с количеством покупок из нижнего правого угла перенести в верхний левый:

.basket-round {
	background-color: green !important;
}

.basket-count {
  top: 0 !important;
  left: 0;
  right: auto !important;
}

Также имеется возможность полностью заменить иконку корзины на кастомную, например вписанную в заголовок Вашего сайта.

Виджет корзины

Замена иконки корзины по умолчанию на собственную

Для заменя иконки корзины по умолчанию на свою собственную, достаточно:

Пример страницы с кастомной корзиной со всеми вышеперечисленными функциями:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Кастомная корзина</title>

	<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
	<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">

	<style>
		/*Скрывает иконку корзины по умолчанию. Примечание: используя этот же css-класс корзину можно не скрывать, а изменить ее дизайн. */
	    .basket-round {
	        display: none;
	    }
	</style>

	<script>
	    document.addEventListener("DOMContentLoaded", function (){
	    	var kak2c_domain = "XXXXXX"; //	Укажите здесь Ваш идентификатор магазина

	    	document.addEventListener("kaktusEvent", function (e){
		        //Отображение количества товаров в корзине при любых его изменениях. Если Вашв иконка корзины не предусматривает отображения количества товаров - не обязетельно. ВНИМАНИЕ! 'custom-cart-quantity' заменить на ID элемента Вашей иконки корзины, в которой будет отображаться количество товаров.
		        var quantityEl = document.getElementById('custom-cart-quantity');
		        if (quantityEl) {
		        	var cart = kaktusWidget.getCart().items;
		        	if (cart) {
			        	var count = cart.reduce(function(count, item) {
			        		return count + item.count;
			        	}, 0);	
			        } else {
			        	count = 0;
			        }
		       		quantityEl.innerHTML = count;
		        };

		        //Сообщение "товар добавлен в корзину". Не обязательно.
		        if (e.detail.type == 'cart_item_add' && e.detail.content.fromOutsidePopup) {
		        	alert('Товар добавлен в корзину');
		        }
		    });

	    	kaktusWidget({
		        domain: kak2c_domain
		    });

	    	//ВНИМАНИЕ! 'custom-shopping-cart' замените на атрибут ID Вашей кастомной иконки, при клике на которую Вы хотите открывать попап корзины.
	        document.getElementById('custom-shopping-cart').addEventListener("click", function (){
	       		document.getElementsByClassName('basket-round')[0].click();     
	        });
	    });
	</script>
</head>
<body>
	<!--BODY документа здесь служит исключительно для примера. Вместо него предусмотрите логику добавления товара в корзину в зависисмости от используемой Вами интеграции с сайтом магазина. Также сверстайте свой кастомный элемент корзины. Для примера это просто ссылка с отображением количества товаров. -->
	<h1>Кастомная корзина</h1>	
	<div>
		<a href="javascript: void(0);" id="custom-shopping-cart">Корзина (всего товаров <span id="custom-cart-quantity">0</span>)</a>
	</div>

	<button onclick="kaktusWidget.changeCart({
        variantId: 'BR00T-000132',
        count: 1,
        operation: 'ADD'
    });">Добавить в корзину</button>
</body>
</html>
Виджет корзины

Интеграция в Ecwid

1. В настройках внешнего вида сайта Ecwid включите отображение артикула на странице товара. Это важно для правильной работы виджета корзины Кактус. Если Вы не хотите чтобы артикул отображался покупателю, его можно скрыть (см. комментарии в коде ниже). Но тем не менее включать в настройках его все равно обязательно.

Войдите в редактирование внешнего вида сайта.

image-1591995135914.png

Затем магазин/страница товара

image-1591995301181.png

image-1591995383089.png

image-1591995451446.png

 

2. В поле "мета-теги для верификации сайта" после уже имеющегося там кода добавьте код интеграции виджета корзины Кактус. При этом вместо "XXXXX" не забудьте указать свой ID аккауната, который можно посмотреть в настройках ЛК Кактуса.

image-1591995599898.png

<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<style>
	.details-product-purchase__checkout, .float-icons__icon--cart, .ec-footer {
		display: none !important;
	}

	/* Необязательная возможность скрыть поле артикула на страницы товара. При надобности раскомментируйте */
	/*.product-details__product-sku {
		display: none !important;	
	} */
</style>

<script>
	document.addEventListener("DOMContentLoaded", function (){
    	var kak2c_domain = "shopXXXXXX"; //	Укажите здесь Ваш идентификатор магазина

    	kaktusWidget({
	        domain: kak2c_domain
	    });

    	document.body.addEventListener('click', function(e) {
    		if (e.target.closest('.details-product-purchase__add-to-bag, .details-product-purchase__add-more')) {
    			var sku = document.querySelector('.product-details__product-sku').textContent.replace(/артикул/gui, '').trim();
    			kaktusWidget.changeCart({
					variantExtId: sku,
					count: 1, 
					operation: 'ADD' 
				});
    			event.stopPropagation();
            	event.preventDefault();
    		}
    	}, {capture: true});

    });
</script>

3. В ecwid задайте артикулы всем товарам. Если Вы не ведете артикулы, можно задать любое значение, лишь бы оно было уникально для каждого товара. Для товаров с вариантами нужно задать уникальный артикул для каждого варианта. И то же самое значение нужно указать в поле "Внешний ID" товара или варианта в ЛК Кактуса.

image-1591996199470.png

image-1591996272639.png

Виджет корзины

Интеграция в Tilda

1. Из ЛК Кактус перейдите в редактор интернет-магазина

image-1592447531907.png

Кликнув по иконке с изображением шестеренки откройте панель настроек витрины

image-1592447692555.png

Выберите вкладку "Интеграции"

image-1592447798913.png

В данной вкладке настройте счетчики Яндекс.Метрики и Google Analytics (не обязательно).

Переключатель "Режим работы по внешнему ID варианта" отвечает за то, какой код товара следует задавать в качестве "Артикула" в Тильде. Если он выключен - указывается ID товара из ЛК Кактуса. Если включен - внешний ID.

image-1592448931677.png

ID товара автоматически создается системой и его нельзя изменить. В качестве внешнего ID Вы можете задать любое значение. Например артикул. Главное чтобы оно было уникальным у всех товаров. А для товаров с вариантами - у всех вариантов всех товаров.

Примечание

При изменении любого значения во вкладке Интеграции, чтобы оно отразилось в Вашем магазине на Тильде надо заново скопировать в Тильду код виджета (см. п. 2)

2. Скопируйте содержимое поля "Виджет корзины для конструктора Тильда" из вкладки "интеграции" витрины в Html-код для вставки внутрь HEAD в Тильде.

Войдите в настройки сайта.

image-1593725864877.png

Далее "еще", "Html-код для вставки внутрь HEAD"

image-1593726077346.png

После редактирования кода обязательно заново опубликуйте все страницы сайта!

3. Для всех товаров в Тильде в поле артикул задайте значение Id или внешнего Id (в зависимости от настроек из п.1) со страницы соответствующего товара ЛК Кактус.

image-1592449279579.png

Для товаров с вариантами надо задать артикул каждого варианта в Тильде равный Id (или внешнему Id) соответствующего варианта в ЛК Кактус.

4.Для того, чтобы связать товары в кактусе и в тильде по ID следует:

А. Перейти на редактирование страницы сайта.

Screenshot_2.png

В разделе где расположены товары нажать на кнопку «Контент».

Screenshot_3.png

 

В карточке товара, который нужно связать следует нажать на «Еще: кнопка, метка, параметры».

Screenshot_4.png

Найти поле «Подзаголовок или артикул» и вписать в него ID товара из кактуса.

Screenshot_5.png

Б. Перейти в раздел товаров.

Screenshot_6.png

Выбрать товар который нужный связать и нажать на него.

Screenshot_7.png

В разделе товара нажать на кнопку "Контент".

Screenshot_8.png

Найти поле «Подзаголовок или артикул» и вписать в него ID товара из кактуса.

Screenshot_9.png

 

 

Виджет корзины

Открытие попапа корзины при каждом добавлении в нее товара

Полное описание интеграции корзины находится здесь. Нужно добавить следующий фрагмент кода:

<script>	
    document.addEventListener("kaktusEvent", function (e){
    	if (e.detail.type == 'cart_item_add' && e.detail.content.fromOutsidePopup) {
           document.getElementsByClassName('basket-round')[0].click();
        }
    });
</script>

Примечание: Если у Вас уже есть обработчик события kaktusEvent с другой логикой, рекомендуется еще один не создавать, а добавить в конец существующего (если параметр обработчика у Вас называется не "e", не забудьте заменить его имя в коде ниже):

if (e.detail.type == 'cart_item_add' && e.detail.content.fromOutsidePopup) {
  document.getElementsByClassName('basket-round')[0].click();
}

 

Виджет корзины

Интеграция в LPMotor

Подключение виджета умной корзины Кактус

Войдите в общие настройки сайта

image-1593529592525.png

image-1593529658594.png

В поле "Вставка в тэг head" добавьте следующий код

image-1593529788777.png

<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">

<script>
    var kak2c_domain = "shopXXXXXX";

    document.addEventListener("DOMContentLoaded", function (){
        kaktusWidget({
            domain: kak2c_domain,
        });

        var buttons=document.querySelectorAll('a[href^="#order"]');

        if (buttons.length) {
	        buttons.forEach(function(elem) {
	        	elem.addEventListener('click', function(event) {
		            event.preventDefault();
		            event.stopPropagation();
		            var article = $(this).attr('href').replace(/^#order:?/gi, '').trim();
		            if (article) {
		                kaktusWidget.changeCart({
							variantId: article, 
							count: 1, 
							operation: 'ADD' 
						});
		            }
		        })
	        });
	    }
    });
    
</script>

Внимание! В строке

var kak2c_domain = "shopXXXXXX";

XXXXXX заменить на ID аккаунта, который можно посмотреть в настройках ЛК Кактус.

Создание кнопки для добавления товара в корзину

Войдите в редактор страницы IPMotor. Добавьте на Вашу страницу новую кнопку.

image-1593530247544.png

image-1593530288683.png

Кликните на эту кнопку, затем войдите в ее редактирование. Выберите Действие - "Переход по ссылке"

image-1593530593983.png

В качестве ссылки задайте следующую строку (начиная со знака "#", без пробелов)

#order:XXXX

Вместо XXXX укажите ID товара, который должна добавлять в корзину эта кнопка. ID товара можно посмотреть в личном кабинете Кактуса:

image-1593530876179.png

Примечание: для товаров с вариантами нужно указывать ID варианта.

Вместо ID товара или варианта можно использовать артикул, который в этом случае указывается в поле "Внешний ID" ЛК Кактуса. Для этого нужно изменить код из предыдущего раздела: фрагмент

 kaktusWidget.changeCart({
   variantId: article, 
   count: 1, 
   operation: 'ADD' 
 });

Заменить на

kaktusWidget.changeCart({
   variantExtId: article, 
   count: 1, 
   operation: 'ADD' 
 });
Виджет корзины

Интеграция в WordPress

При наличии WooCommerce (или одной из тем, базирующихся на нем)

1. Зайти в редактор тем WP и найти там файл, содержащий head всех страниц. Обычно он называется header.php

image-1594993490487.png

2. Добавить в <head> страницы следующий код:

  <script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
  <link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css"> 
  <script>
    var kak2c_domain = "shopXXXX";
      document.addEventListener('DOMContentLoaded', function () {
      kaktusWidget({
            domain: kak2c_domain,
		  
        	//Аналитика. Это примерный код. Вместо YYYY подставьте ID вашего счетчика Яндекс. 
        	//Если Вы используете счетчик, отричный от Яндекс.Метрики замените этот код на код Вашей метрики. 
        	//Необязательно. Если аналитика вообще не нужна, удалите франмент до комментария "Конец аналитики"
		  	basketClickCallback: function(){
				//События аналитики при открытии корзины
				yaCounterYYYY.reachGoal('checkout_started');
			},

            newOrderCreatedCallback: function(){
              //События аналитики при формированиии заказа
              var goalParams = {
                order_price: kaktusWidget.totalSum,
                currency: "RUB"
              }
              yaCounterYYYY.reachGoal('checkout_finished', goalParams);
            },
        	//Конец Аналитики
          });
       
      //Лисенер клика по кнопке "купить"
      jQuery('body').on('click', "a[href='#buy']", function(e){
        e.preventDefault();
		var varForm = jQuery(this).closest('.variations_form');
		var article = '';
		if (varForm.length) {
			//Товар с вариантами
			var variations = JSON.parse(varForm.attr('data-product_variations'));
			var variationId = varForm.find('input.variation_id').val();
			if (!variationId) {
				return;
			}
			variations.some(function(variation) {
				if(variation.variation_id == variationId) {
					article = variation.sku;
					return true;
				}
			});
		} else {
			article = jQuery(this).data('itemId');	
		}
		if (article) {
			kaktusWidget.changeCart({
				variantExtId: article, 
				count: 1, 
				operation: 'ADD', 
			});
		}
      });
    }); 
  </script>  

Внимание! Вместо "XXXXX" не забудьте указать свой ID аккауната, который можно посмотреть в настройках ЛК Кактуса.

Вместо YYYY - ID Вашего счетчика в Яндекс.Метрике. Или если Вы не используете Яндекс.Метрику - удалите код аналитики (см. комментарии по коду). Подробное руководство по подключению аналитики.

3. Найдите в коде темы все кнопки, при нажатии на которые товар должен добавляться в корзину. Файлы в которых они расположены зависят от темы. Возможно этих файлов вообще нет в теме, тогда их надо создать скопировав из кода плагина Woocommerce (см. документацию WP по созданию тем). И модифицируйте их код наподобие следующего:

<a href="#buy" data-item-id="<?php echo $product->sku ?>" name="add-to-cart" class="single_add_to_cart_button button alt"><?php echo esc_html( $product->single_add_to_cart_text() ); ?></a>

Выделенный жирным фрагмент (включая, что кнопка должна представлять из себя именно тег <a>) важен для правильной работы кнопки. Остальной код рекомендуется не копировать отсюда а оставить тот который есть в теме, чтобы сохранить внешний вид кнопки. Или кастомизировать на свое усмотрение.

4. В каталоге товаров WP проставьте для всех товаров Артикул (или любой другой удобный Вам идентификатор лишь бы он был уникален для каждого товара и варианта). Для простого товара:

image-1594995617940.png

Для вариантного товара. Важно! Это нужно сделать отдельно для каждого варианта:

image-1594995883927.png

5. Такие же артикулы нужно проставить в полях "Внешинй ID" товаров (или вариантов для товаров с вариантами) в ЛК Кактуса. Важно! Сопоставление товаров в ЛК Кактус выполняется именно по полю "Внешний ID", а не Артикул.

Без WooCommerce (каталог товаров отсутствует, кнопка "Добавить в корзину" добавляется вручную к верстке и вручную привязывается ко внешнему ID товара в Кактусе)

В п.2 добавить следующий код:

<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">

<script>
    var kak2c_domain = "shopXXXXXX";

    document.addEventListener("DOMContentLoaded", function (){
        kaktusWidget({
            domain: kak2c_domain,
        });

        var buttons=document.querySelectorAll('a[href^="#buy"]');

        if (buttons.length) {
	        buttons.forEach(function(elem) {
	        	elem.addEventListener('click', function(event) {
		            event.preventDefault();
		            event.stopPropagation();
		            var article = $(this).attr('href').replace(/^#buy:?/gi, '').trim();
		            if (article) {
		                kaktusWidget.changeCart({
							variantExtId: article, 
							count: 1, 
							operation: 'ADD' 
						});
		            }
		        })
	        });
	    }
    });
    
</script>

Внимание! Вместо "XXXXX" не забудьте указать свой ID аккауната, который можно посмотреть в настройках ЛК Кактуса.

Код приведен без аналитики. Если она нужна, она будет аналогична варианту с Woocommerce, можно скопировать оттуда. Подробное руководство по подключению аналитики.

3. В верстку добавить кнопки добавления товара в корзину

<a href="#buy:NNNNNN">Добавить в корзину</a>

где вместо NNNNNN указать Внешний ID товара или варианта (для товара с вариантами) из ЛК Кактус. Код приведен в минимально необходимом для работы кнопки виде. Скорее всего к нему следует добавить классы или стили для придания кнопке желаемого вида. А также заменить текст кнопки.

пп.4 не нужен. Но нужно задать всем товарам и вариантам в ЛК Кактус внешний ID, как это описано в п.5.

Внимание! Весь код в этом руководстве сильно зависит от используемой темы WP и может потребоваться его модификация.

Виджет корзины

Интеграция с Platforma LP

Для интеграции корзины Кактус необходимо зайти в админку сайта на Platforma LP и открыть настройки необходимой страницы.

image-1599743103520.png

В разделе Метрика и скрипты нажать кнопку "Добавить плагин".

image-1599743214067.png

В открывшемся списке выбрать "Произвольный код".

image-1599743302089.png

Плагину нужно задать имя, и в "Произвольный код HEAD" вставить следующее:

<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">

<script>
    var kak2c_domain = "shopXXXXXXX";

    document.addEventListener("DOMContentLoaded", function (){
        kaktusWidget({
            domain: kak2c_domain,
        });

    });
  
  function add2cart(item) {
    kaktusWidget.changeCart({
    variantId: item, 
    count: 1, 
    operation: 'ADD' 
    });
  }
    
</script>

shopXXXXXXX необходимо заменить на ID магазина в формате shop + ID аккаунта в Кактусе (можно найти в настройках).

image-1599743609300.png

image-1599743366265.png

Сохранить плагин и проверить, что он включён.

image-1599743677656.png

Далее открыть редактор страницы.

image-1599743726898.png

Для кнопки "Купить" выбрать действие "Выполнить Javascript" и в соответствующее поле вставить:

add2cart('1040');

1040 -- ID товара в Кактусе, который можно найти в ЛК Кактус в разделе Товары.

image-1599743900864.png

image-1599743766033.png

 

Виджет корзины

Интеграция с MODX

Установка корзины Кактус в CMS MODX

В панели управления MODX перейти в Элементы - Шаблоны. Составляющие вашего магазина на MODX можно кастомизировать по своему усмотрению. В случае, на примере которого описана инструкция, необходимо зайти в шаблон Home.

image-1599723877215.png

В открывшемся поле с кодом шаблона в тег head вставить следующее:

<!-- умная корзина kak2c -->
	<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
	<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
	
	<script>
  document.addEventListener("DOMContentLoaded", function (){
	 var kak2c_domain = "shopXXXXXX";
	 kaktusWidget({
      	domain: kak2c_domain,
      
      	//Необязательные коллбэки. Назначение похоже на события выше.
      	basketClickCallback: function(){
          //Вызывается при открытии попапа корзины
        },

        newOrderCreatedCallback: function(){
          //Вызывается при создании заказа
        }
    });
    $(".open-cart").on('click', function(event) {
            event.stopPropagation();
            event.preventDefault();
            var productId = $(this).data('productId');
            console.log('productId: ' + productId);
            kaktusWidget.changeCart({
							variantId: productId,
							count: 1, 
							operation: 'ADD'
						});
						setTimeout(function () {
							$(".basket-round").click();
						}, 1000);	
			
		});
  });
	</script>
	
	<!-- /умная корзина kak2c -->

shopXXXXXX необходимо заменить на ID аккаунта, который можно найти в ЛК Кактус в Настройках.

Установка кнопки "Купить"

Зайдите в раздел Элементы - Чанки и выберите необходимый чанк, в котором будет размещаться кнопка.

image-1599725491274.png

Код кнопки:

	<a href="javascript:void(0);" class="shop__btn btn add_item open-cart quick-order__link" data-product-id="[[+productId]]">Купить</a>
Связка товаров

Для корректной интеграции товаров необходимо поле идентификатора, связывающее товары, заведённые в MODX, с товарами в Кактусе.

В разделе Элементы - Дополнительные поля необходимо создать новое поле идентификатора- в нашем случае добавить дополнительную колонку к существующей форме товаров. 

image-1599726178307.png

Создать новое дополнительное поле tvproductId

Инструкцию о создании дополнительных полей в MODX можно найти здесь.

image-1599728980346.png

После чего данное поле необходимо добавить в существующую форму товара.

image-1599728674473.png

image-1599729233460.png

После этого в разделе с товарами появится искомая колонка.

image-1599726178307.png

ID товара можно найти в Личном кабинете Кактуса в разделе Товары - Все товары в карточке искомого товара.

image-1599729503730.png

 

 

Виджет корзины

Интеграция с Shop-Script

Для установки умной корзины Кактус в магазин на Shop-Script зайдите в админку магазина, перейдите во вкладку Сайт и откройте Настройки сайта. 

В поле "Дополнительный JavaScript-код для вставки перед закрывающим тегом </head>" вставьте приведённый ниже код.

image-1602146343628.png

<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">

<script>
    var kak2c_domain = "shopXXXXXXX";

    document.addEventListener("DOMContentLoaded", function (){
        kaktusWidget({
            domain: kak2c_domain,
        });
    
    //
    $('.js-submit-button').on('click', function(event) {
      event.stopPropagation();
      event.preventDefault();
      var productExtId = $('input[name ="product_id"]').val();
      console.log("product_id: " + productExtId);
      add2cart(productExtId)
    });

    });
  
  function add2cart(item) {
    kaktusWidget.changeCart({
    variantExtId: item, 
    count: 1, 
    operation: 'ADD' 
    });
  }
    
</script>

shopXXXXXXX нужно взять в ЛК Кактус в Настройках, где XXXXXXX -- это ID вашего аккаунта.

image-1602146715636.png

После этого в админке Shop-Script перейти во вкладку Магазин, выбрать раздел Товары -- Все товары. ID товара в Shop-Script необходимо скопировать во Внешний ID товара в Кактусе.

image-1602147118068.png

 

image-1602147196099.png

Виджет корзины

Интеграция с Magento

Установка корзины

Зайдите в админку вашего сайта на Magento. На панели управления выберите "Система", и в выпадающем списке выберите "Конфигурация".

image-1603772933609.png

В Конфигурации выбрать Дизайн.

image-1603772990559.png

В разделе Дизайн выбрать HTML заголовок, после чего выбрать Разнообразные скрипты.

image-1603773031936.png

image-1603773068066.png

Вставить в поле следующее:

<!-- Kak2c checkout -->
<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">

<script>
  document.addEventListener("DOMContentLoaded", function (){
	var kak2c_domain = "shop4547084"; //	Укажите здесь Ваш идентификатор магазина
    
    //Собственно инициализация виджета корзины
    kaktusWidget({
      	domain: kak2c_domain,
      
      	//Необязательные коллбэки. Назначение похоже на события выше.
      	basketClickCallback: function(){
          //Вызывается при открытии попапа корзины
        },

        newOrderCreatedCallback: function(){
          //Вызывается при создании заказа
        }
    });
	
	var add2cartButtons = document.getElementsByClassName("addtocart");
	for (var i = 0; i < add2cartButtons.length; i++) {
		//add2cartButtons[i].addEventListener('click', add2cart, false);
		addSomeEvent('click', add2cartButtons[i], add2cart);
	}
	
	var add2cartButtons2 = document.getElementsByClassName("btn-cart");
	for (var i = 0; i < add2cartButtons2.length; i++) {
		//add2cartButtons2[i].addEventListener('click', add2cart2, false);
		addSomeEvent('click', add2cartButtons2[i], add2cart2);
	}
    	
  });
  
function getProductExtId(onClickString) {
	var startIndex = onClickString.indexOf('/product/') + 9;
	var endIndex = onClickString.indexOf('/form_');
	return onClickString.substring(startIndex, endIndex);
}

function addSomeEvent(evnt, elem, func) {
   if (elem.addEventListener)  // W3C DOM
      elem.addEventListener(evnt,func,false);
   else if (elem.attachEvent) { // IE DOM
      elem.attachEvent("on"+evnt, func);
   }
   else { // No much to do
      elem["on"+evnt] = func;
   }
}

var add2cart = function() {
    var attribute = this.getAttribute('onclick');
	var extId = getProductExtId(attribute);
	console.log(extId);
	kaktusWidget.changeCart({
		variantExtId: extId,
		count: 1, 
		operation: 'ADD'
	});
};
var add2cart2 = function() {
	var offerFormAction = document.getElementById("product_addtocart_form").getAttribute('action');
	var qtyVal = parseInt(document.getElementById("qty").value);
	var extId = getProductExtId(offerFormAction);
	console.log(extId);
	kaktusWidget.changeCart({
		variantExtId: extId,
		count: qtyVal, 
		operation: 'ADD'
	});
	
}; 

//# sourceURL=kak2cInit.js
</script>
<!-- /Kak2c checkout -->

Внимание! В shopXXXXXXX вместо XXXXXXX нужно указать ваш идентификатор магазина в ЛК Кактус в разделе Настройки -- Общие.

image-1603774130751.png

Связка товаров

В админке сайта зайти в Каталог и найти товары. Значения ИД из Magento скопировать в поле Внешний ID в ЛК Кактус.

image-1603773342352.png

Внешний ID можно найти непосредственно в карточке товара в ЛК Кактус.

image-1603773705473.png

Виджет корзины

Интеграция с Insales

Установка корзины Кактус в Insales

В админ панели Insales перейти в Настройки > Настройки сайта > Счётчики и коды.

image-1629731155571.png

В поле "JavaScript-код для вывода на всех страницах магазина" вставить следующее:

<script src="https://static.kak2c.ru/v2/kak2c.checkout.js"></script>
<link rel="stylesheet" href="https://static.kak2c.ru/v2/kak2c.checkout.css">
<script>
   document.addEventListener("DOMContentLoaded", function (){
        kaktusWidget({
            domain: "shopXXXXXXX",            
        });
     	$('.header__cart').hide();
        $('.add-cart-counter__btn').on('click', function(event) {
            event.stopPropagation();
            event.preventDefault();
            var extId = $('.sku-value').text();
            if (extId) {
				console.log('extId: ' + extId)
                kaktusWidget.changeCart({
                    variantExtId: extId,
                    count: 1,
                    operation: 'ADD'
                });
            }
        });
    });
  //# sourceURL=kak2c_cart.js
</script>

Код для вставки выше проверялся на работоспособность только с шаблоном дизайна "Fourth". Работоспособность на других шаблонах не гарантируется.

В зависимости от используемого вами шаблона вам может понадобиться изменить определённые детали в скрипте для его корректной работы.

В shopXXXXXXX значение XXXXXXX необходимо заменить на ID аккаунта, который можно найти в ЛК Кактус в Настройках.

Для оптимальной работы корзины поле Внешний ID в карточке товара в Кактусе должно совпадать с Артикулом товара в InSales.

Обратите внимание, что заказы, оформляющиеся через корзину Кактуса, автоматически попадают в ЛК Кактуса, минуя админку InSales.

Карта ПВЗ

Подключение виджета:

Пример подключенного виджета можно посмотреть здесь:

https://static.kak2c.ru/pvz_map_test.html

2. Событие (kaktusEvent) при выборе ПВЗ пользователем

//Пример подписки на события виджета
    document.addEventListener('kaktusEvent', function(event) {
        console.log(event.detail);
    });
 
//содержимое event.detail:
{
   "type":"get_delivery_point",
   "content":{
      "address":{
         "country":"Россия",
         "countryCode":"RU",
         "region":"Москва",
         "area":null,
         "city":"Москва",
         "settlement":null,
         "street":null,
         "house":null,
         "block":null,
         "building":null,
         "flat":null,
         "fullAddress":"117148, Москва г, Брусилова ул, д.39, корпус 1",
         "fullCity":null,
         "rawData":null,
         "zip":null,
         "regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
         "areaFias":null,
         "cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
         "settlementFias":null
      },
      "code": "17719", //ИД ПВЗ
      "courier": "Boxberry",
      "courierCode": "BOXBERRY",
      "courierPostamatType": "СПВЗ",
      "deliveryServices":[
         "TRYING",
         "CHECK_CONTENT",
         "PARTIAL_DELIVERY"
      ], //доступные доп.опции доставки в данном пвз
      "description": "Остановка -  4-й микрорайон Щербинки.\nПримерное расстояние от остановки до Отделения  -  100 м.\n24-этажный жилой дом.\nРасположение входа в отделение  -  Отдельный вход со стороны улицы (автостоянки).\nЭтаж  -  1.",
      "latitude": "55.501896",
      "longitude": "37.599239",
      "maxSize": "234",
      "maxWeight": 15,
      "metroStation": "Щербинка",
      "paymentMethods":[
         "COD_CASH",
         "COD_CARD"
      ],
      "type": "PVZ",
      "workTime": "Пн  10 00-20 00 Вт  10 00-20 00 Ср  10 00-20 00 Чт  10 00-20 00 Пт  10 00-20 00 Сб  10 00-20 00 Вс  10 00-20 00"
      "downloaded":true,
      "price":120
   }
}

Витрина Кактус

Витрина Кактус

Подключение каталога Кактус через IFrame

В заголовок или в тело страницы добавьте код:

Где вместо shopXXXXXX указать домен Вашего магазина.

Этот код надо добавлять также на страницы сайта где не будет отображаться каталог товаров, но нужно выводить корзину, строку поиска по каталогу или избранную категорию.

В то место верстки, где должен отображаться каталог товаров добавить код:

<iframe id="cactus-container" frameborder=0 scrolling="no" style="width:100%;" data-home-page="/" data-other-page="/catalogue"></iframe>

 

В атрибутах data-home-page и data-other-page необходимо указать URI страниц Вашего сайта на которых будет отображаться соответственно главная страница каталога и все другие страницы. Т.е. Вы на своем сайте можете сверстать 2 разные страницы для каталога. Одну для главной страницы например с большим баннером. Вторую, более компактную — для всех других страниц каталога: страницы коллекции, страницы товара и пр. Если на Вашем сайте главная и все другие страницы каталога будут отображаться в одинаковом окружении – просто укажите обеим этим атрибутам одно и то же значение. В приведенном выше примере главная страница каталога отображается на корневой странице сайта. А все другие страницы – на странице catalogue. В верстке обеих указанных в атрибутах data-home-page и data-other-page страниц вашего сайта должен быть вставллен приведенный выше код.

Примечание 1: URI — это URL без доменного имени. Т.е. если страница Вашего сайта на которой находится каталог называется http://www.mysite.ru/mykatalog, нужно указать «/mykatalog».

Примечание 2: Для тестового окружения строки

<script type="text/javascript" src="https://storefront.kak2c.ru/js/iframe-outer.js"></script>
<link href="https://storefront.kak2c.ru/css/iframe-outer.css" rel="stylesheet">

Заменить на

<script type="text/javascript" src="https://storefront-test.kak2c.ru/js/iframe-outer.js"></script>
<link href="https://storefront-test.kak2c.ru/css/iframe-outer.css" rel="stylesheet">

Блок избранной коллекции (не обязательно)

<iframe class="cactus-favorite" frameborder=0 scrolling="no" style="width:100%;" data-home-page="/iframe-page" data-other-page="/iframe-page/slave" data-collection-id="XXXX"></iframe>

Блоки избранных коллекций можно размещать как на странице с блоком каталога так и без него. На одной странице может быть несколько таких блоков. На странице которая задана как "неглавная" в атрибутах data-other-page всех блоков обязательно должен быть блок каталога.

Вместо XXXX укажите Id коллекции, которую будет отображать блок.

Описание атрибутов data-home-page и data-other-page см. выше. Внимание! эти атрибуты должны быть заданы одинаково у всех имеющихся на сайте блоков каталога и избранных коллекций. Даже если на одной странице имеется несколько таких блоков, эти атрибуты необходимо задать им всем с одинаковыми значениями.

Строка поиска по каталогу (не обязательно)

<input type="text" id="cactus-search-input" class="cactus-search-autocomplete">
<button id="cactus-search-button" type="button">Искать</button>
<script>
    document.addEventListener("DOMContentLoaded", function (){
        document.getElementById('cactus-search-button').addEventListener("click", function (){
            var val = document.getElementById('cactus-search-input').value;
            if (val.trim()) {
                window.location.hash = '#/search?query=' + val;
            }
        });
    });
</script>

Код примерный. Элемент ввода строки поиска и элемент собственно запускающий поиск необязательно должны быть input и button. ID элементов может быть произвольный. Чтобы запустить поиск достаточно присвоить странице с витриной хэш #/search?query=искомая строка. Но чтобы работал suggestion (т.е. подсказка, появляющаяся по мере ввода пользователем значения) элемент ввода должен быть input type="text" и иметь класс cactus-search-autocomplete.

Кастомный значок корзины (не обязательно)

Штатный значок корзины можно заменить собственным, который лучше соответствует дизайну Вашего сайта или например является частью его хедера.

Код для примера представляет собой просто надпись «корзина» с количеством товаров. При клике на него откроется штатный попап корзины.

<a href="javascript: void(0);" id="cactus-cart" class='cactus-cart_empty'>
    Корзина: <span id="cactus-cart-quantity" class='cactus-cart_empty'>0</span>
</a>

id cactus-cart и cactus-cart-quantity должны быть именно такими, как указаны в примере. cactus-cart — элемент при клике на который должен открываться попап корзины.

сactus-cart-quantity – элемент, в который помещается текущее количество товаров в корзине

Класс cactus-cart_empty добавляется обеим этим элементам когда корзина пуста. Может использоваться для различной стилизации пустой или непустой корзины.

Чтобы скрыть штатную иконку корзины нужно добавить следующий стиль:

<style>
    .basket-round {
        display: none;
    }
</style>

Примечание:  описанный здесь способ замены штатного значка корзины будет работать только совместно с витриной Кактус. Если Вы используете виджет корзины отдельно от витрины, воспользуйтесь этим руководством.

Витрина Кактус

Редактирование шаблона сайта

Шаблоны позволяют настроить внешний вид витрины путем правки HTML-верстки и CSS-стилей страниц. В отличие от настроек параметров витрины эта возможность предполагает некоторые знания в верстке и Веб-разработке. Но если результат не будет соответствовать ожидаемому, Вы всегда сможете сбросить шаблоны на значение по умолчанию.

Из ЛК Кактус войдите в редактор Интерннт-магазина, откройте админпанель и выберите в ней вкладку "шаблоны".

image-1592831349565.png

image-1592831426154.png

image-1592831610273.png

 

Слева имеется список шаблонов, каждый из которых отвечает за отображение определенного компонента витрины. Шаблоны бывают двух видов. Стили - это обычный css:

image-1592831904009.png

Для простоты то что возможно рекомендуется делать именно при помощи редактирования стилей. Например чтобы скрыть ненужный элемент проще всего задать ему стиль display: none; Имя  CSS-класса соответствующего элемента можно найти в инспекторе браузера, который открывается по F12.

image-1592832149214.png

HTML разметка представляет собой шаблоны популярного фреймворка VueJS. Это по сути html-код, но с добавлением полей (красная рамка) и директив (синяя рамка):

image-1592832876559.png

Синтаксис шаблонов описан в документации Vue.

Изменения в шаблоне сохраняются в три этапа. Что позволяет Вам разрабатывать и отлаживать свой код сколько угодно времени. А Ваши покупатели при этом будут видеть предыдущую, стабильную, уже отлаженную версию магазина.

Изменения в коде сразу же отображаются во внешнем виде витрины как только редактор кода теряет фокус. Но в таком виде они будут потеряны при закрытии страницы в браузере, что удобно для быстрых экспериментов. Покупатели их не увидят.

Чтобы сохранить шаблон как черновик нажмите кнопку:

image-1592836465530.png

Изменения не пропадут при выходе из браузера. Но будут видны только если Вы вошли из ЛК в витрину в режиме редактора. Покупатели их по-прежнему не увидят.

Чтобы сделать изменения видимыми покупателю нажмите кнопку:

image-1592836711746.png

Кнопка "сбросить черновик" вернет шаблоны магазина к предыдущей опубликованной версии.

Можно удалить все Ваши изменения шаблона независимо от того опубликованы они или нет и вернуть магазин к версии по умолчанию:

image-1592836873239.png

Пример. Правка на странице товара.

Заменим надпись "Весь товар сертифицирован" на ссылку на страницу контактов.

image-1592838821051.png

 

Находим отмеченный красной рамкой шаблон.

image-1592839163796.png

Заменяем текст в синей рамке на следующий:

Нажимаем кнопку "Сохранить". Смотрим полученный результат:

image-1592839520783.png

Если он нас устраивает, возвращаемся в редактор шаблонов и нажимаем кнопку "Опубликовать", Чтобы результат стал виден покупателям.

Авторизация

Необходимо во всех вызовах, кроме регистрации указывать имя текущего домена в заголовках запроса (Header) в параметре Domain. Значение Domain - shop + ид аккаунта из общих настроек в ЛК. Например, если ид аккаунта 18236, то значение должно быть: shop18236 Подробнее про данный вид авторизации - в разделе "Авторизация по домену в публичных методах апи" Если в вызове нет /pub, /dlv, /prompter - (например /api/lite/products) - то нужно дополнительно указывать токен доступа, полученный в методе регистрации/авторизации (/api/lite/auth)

Авторизация

/api/lite/auth

Авторизация

/api/lite/auth

Для авторизации необходимо выполнить следующий запрос

{
"login":"wow55@mail.ru",
"password":"wow"
}

В ответ возвращается

Успех

{
  "success": true,
  "access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3b3c1NkBtYWlsLnJ1IiwiZXhwIjoxNTQ2OTc2NzQ5fQ.4Zdev5PSIk1TmsPFxjxHukYwH1wa_efn19cfLIkT8k2g9xEeVMOnYK4A4pTC6NCpsp2kq8_dvygRxAyyEKNwiQ",
  "token_type": "bearer",
  "login": "wow56@mail.ru",
  "expires_in": 14400,
  "privileges": [
    "ORDERS_READ",
    "ORDERS_WRITE"
  ]
}

где access_token содержит токен для доступа в закрытую часть апи Lite, а 

expires_in - количество секунд действительности выданного токена.

Ошибка:

{
"success": false,
"errors": [
 {
 "code": 401,
 "message": "Unauthorized"
 }
]
}

с http кодом 401.

 

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

в запросе должен быть header

с ключем Authorization

и значением вида "Bearer {access_token}"

например Bearer

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3b3c1NUBtYWlsLnJ1IiwiZXhwIjoxNTQ2ODA3MjU3fQ.1vSO5DXhewQfjKITK76W8JhEZM_Wx2YgyEbdjfg9GDs0ymtRtmRgFuZen_n8fM00H1Uda_i6M2-Y1PbjN4edZA

 

После истечения срока действительности токена - апи будет выдавать ошибку 

{
"success": false,
"errors": [
 {
 "code": 401,
 "message": "Unauthorized"
 }
]
}

С http кодом 401

Авторизация

Авторизация для сторонних приложений

Для получения токена авторизации в системе необходимо перенаправить пользователя на адрес

https://lk2.kak2c.ru/third_party_sign_in?redirect_uri={адрес для редиректа}&state={csrf-токен, опционально}

После ввода пользователем своих данных, при успешной авторизации, его перенаправит на указанный адрес с указанием токена в параметре:

{адрес для редиректа}?access_token={access_token полученный при авторизации}&token_type=bearer&expires_in={срок жизни токена}&state={state, полученный из GET параметров, если он был указан}

Авторизация

Авторизация по домену в публичных методах апи

Для авторизации в вызовах, адреса которых содержат /pub, /dlv, /prompter необходимо передавать заголовок Domain

Значение Domain - shop + ид аккаунта из общих настроек в ЛК. Например, если ид аккаунта 18236, то значение должно быть: shop18236

image-1688635916873.png

Пример запроса с авторизацией по хедеру:

curl --header "Domain: shopXXXXXXX" https://app.kak2c.ru/api/lite/pub/collections

curl --header "Domain: shopXXXXXXX" https://app.kak2c.ru/api/prompter/countries

Вместо XXXXXXX - необходимо подставить ид аккаунта.

 

Пример для Postman

image-1688636026171.png

Аккаунт

Аккаунт

/api/lite/pub/register

Создание нового аккаунта Кактус Lite 

/api/lite/pub/register

Для регистрации необходимо выполнить следующий запрос

{
   "account":{
      "email":"test@test.ru",
      "phone":"123456",
	  
      "type":"abc" // опциональный параметр кода учетной записи
   }
}

В ответ возвращается 

Успех

возвращается jwt токен для доступа в админский api созданного аккаунта, после чего необходимо выполнить запрос инициализации аккаунта (/api/lite/registration_init)

{
"success": true,
"authToken": {
"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhYmNkNTRAYWJjLnJ1IiwiZXhwIjoxNTQ3MjIyOTYwfQ.3NkyrZshkAYJWpIvanKuVv5I5Lqh7gCAojszBys9tOnqOdIpTDm5tCDzDWIt71YuxLBCgwlmC5OiH1Sombp2Hg",
"token_type": "bearer",
"login": "abcd54@abc.ru",
"expires_in": 14400,

"init_state": "0"
}
}

Ошибка

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Аккаунт

/api/lite/pub/email/quote

Отправка email с заявкой на консультацию через бэкенд

/api/lite/pub/email/quote

Отправка письма с заявкой на консультацию. 

Защи/api/lite/pub/email/quщено с помощью reCaptcha (пока не реализовано)

Пример запроса:

{
"customerName":"Вася",
"customerPhone": "123456",
"customerEmail":"test@test.ru",
"title":"Заявка на консультацию",
"message":"Мне ничего не понятно, помогите"
}

Пример успешного ответа:

{
"success": true
}

Пример ошибки:

{
"success": false,
"errors": [
{
"code": 0,
"message": "Email не валиден"
}
]
}
Аккаунт

/api/lite/registration_init

Инициализация нового аккаунта Кактус Lite

/api/lite/registration_init

Для инициализации и заполнения аккаунта начальными данными необходимо выполнить указанный запрос

В ответ возвращается

Успех:

{

"success": true

}

Ошибка:

{
"success": false,
"errors": [
{
"code": 0,
"message": "Данный аккаунт уже инициализирован"
}
]
}
Аккаунт

/api/lite/pub/password_reset

Запрос на сброс пароля Кактус Lite

/api/lite/pub/password_reset

Для запроса сброса необходимо выполнить следующий запрос:

{ 
    "email":"test@test.ru"   
}

В ответ возвращается

Успех:

{

"success": true

}

при этом, по указанному email отправляется письмо со ссылкой вида

http://localhost:33043/password_reset_confirm/?t=6aaccd91-1045-4200-b105-b4db79490fee

Где адрес сервера будет взят из текущего адреса, включая домен 3 уровня.

срок действия токена - 1 час

Данная ссылка будет открыта пользователем в браузере GET запросом. 

js код должен обработать открытие подобной ссылки и вывести пользователю запрос на ввод нового пароля и подтверждение пароля.

По нажатию кнопки подтверждения на данном экране создания нового пароля следует выполнить POST запрос на адрес /api/lite/pub/password_reset_confirm с передачей токена из ссылки и нового пароля  (см следующий метод).

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Аккаунт

/api/lite/pub/password_reset_confirm

Сброс пароля 

/api/lite/pub/password_reset_confirm

Для сброса необходимо выполнить запрос с передачей временного токена сброса пароля и нового пароля:

{ 
    "token":"6aaccd91-1045-4200-b105-b4db79490fee",

    "password": "abcd"
}

В ответ возвращается

Успех:

{

"success": true

}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Аккаунт

/api/lite/notifications

Перечень уведомлений для пользователя

/api/lite/notifications

Возвращает перечень сообщений для пользователя.

По умолчанию, возвращается с указанным количеством (last_count), начиная от самого последнего.

Запрос:

Параметр Тип / формат Описание
last_count integer Количество сообщений

Пример запроса:

{
    "last_count":10
}

Результат запроса:

Параметр Тип / формат Описание
notifications array Массив уведомлений

Пример результата запроса:

{
    "success": true,
    "notifications": [
        {
            "date":"2019-01-09T20:00:02",
            "text":"Уведомление 1"
        },
        {
            "date":"2019-01-09T20:00:01",
            "text":"Уведомление 2"
        }
    ]
}
Аккаунт

/api/lite/account_info

Запрос данных аккаунта

/api/lite/account_info

Метод возвращает информацию о текущем аккаунте.

Параметр Тип / формат Описание

login

string

Логин пользователя

domains

array[object]

Массив доменов, связанных с аккаунтом

  • domain - домен 3 уровня

  • auto_generated - флаг, что домен автосоздан при регистрации

balance

object

Информация о балансе:

  • total - общий остаток на счете

  • reserved - заблокированная сумма

  • available - доступный остаток

billingBalance

object

Информация о балансе (биллинг):

  • total - общий баланс / задолженность
  • expired - просроченная задолженность

pickupSettings

object

Настройки точки сбора (см описание метода /api/lite/settings/pickup)

b2bFlagAllowed

boolean

Настройка для выгрузки B2B заказов -- если true, то в заказе появится галка "B2B заказ"
*Настройка для B2B включается по запросу клиента; по умолчанию не используется.

Пример результата запроса:

{
  "success": true,
  "login": "tatiana.bogatel@theroadwear.com",
  "domains": [
    {
      "domain": "shop2151264",
      "auto_generated": true,
      "external_domain": false
    },
    {
      "domain": "theroadwear",
      "auto_generated": false,
      "external_domain": false
    }
  ],
  "balance": {
    "total": 0,
    "reserved": 0,
    "available": 0
  },
  "billingBalance": {
    "total": -79446.00,
    "expired": -2000.00
  },
  "pickupSettings": {
    "person_full_name": "Фарид",
    "person_phone": "+79999999999",
    "address": {
      "country": "Россия",
      "countryCode": "RU",
      "region": "Московская область",
      "area": "Чеховский район",
      "city": "Чехов",
      "settlement": "сельское поселение Баранцевское, в районе деревни Лешино, пром. зона «Лешино»",
      "street": "",
      "house": "владение 1",
      "block": "",
      "building": "СТРОЕНИЕ 1",
      "flat": null,
      "fullAddress": "142326, РФ, Московская область, Чеховский район, сельское поселение Баранцевское, в районе деревни Лешино, промышленная зона «Лешино», владение 1, строение 1",
      "fullCity": null,
      "rawData": null,
      "zip": "142326",
      "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
      "areaFias": null,
      "cityFias": "7eeb876e-7b67-4ed7-91ec-0588712db96c",
      "settlementFias": "5f12f12b-42b3-4f89-b214-d8ab9c10e9f8"
    }
  },
  "shopId": "2151264",
  "shopName": "ООО «Роуд Продакшн»",
  "orderSummary": {
    "DELIVERED": 24,
    "RETURNED": 2,
    "CANCELED": 62
  },
  "autoBlockAccount":true,
  "tempBlockAccount":true,
  "tempBlockAccountReason":"Временно заблокирован"
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Аккаунт

/api/lite/privileges

Запрос текущих привилегий

/api/lite/privileges

Метод возвращает список текущих привилегий авторизованного пользователя

Пример результата запроса:

{
    "privileges": [
      "DASHBOARD_DATA_READ", 
      "SETTINGS_READ", 
      "ORDERS_READ"
    ]
}

Товары

Товары

Комментарии по синхронизации товаров и остатков

Для создания новых товаров и обновления существующих, следует использовать метод

POST /api/lite/products

Каждый продукт обязательно должен содержать хотя бы один вариант. Поэтому, при создании нового продукта, автоматически создается к нему один вариант.

Варианты - это реальные SKU, у них есть вес, размеры, штрихкоды и т.д. Продукт же содержит только общие параметры.

Момент к обсуждению - при синхронизации товаров с Cactus, надо ли выгружать иерархию с вариантами, либо “развернуть” варианты в плоский список в Кактусе (один вариант = один продукт Кактус).

Вариантами можно управлять как из метода products, так и напрямую, методом products/variants.

Кактус имеет систему резервирования. При оформлении заказа, Кактус пытается взять резерв. Это необходимое условие для допуска заказа к отгрузке.

Товары

/api/lite/products

Запрос списка продуктов (GET /api/lite/products)

/api/lite/products

Метод возвращает перечень всех продуктов / товарных предложений (активных и неактивных).

Продукт всегда содержит хотя бы один вариант.

Правильно рассматривать Продукт - как виртуальную сущность (группу), а вариант - как физический товар. В рамках одного Продукта может быть несколько Вариантов (например, различные цвета и размеры).

Каждый Вариант имеет набор Опций, характеризующих именно этот вариант (например Цвет=blue, Размер=XL). Не может существовать более одного Варианта с одинаковым набором Опций.

 

Фильтрация по полям товара

Можно задавать фильтр параметром ?query=test - для фильтрации по полям article, humanId, shortName, fullName, description

Дополнительно можно фильтровать по конкректному продукту параметром ?id=1000

Имеется поддержка фильтрации и по другим полям:

 

Фильтрация по фильтрам, атрибутам, вариантам товара

Фронтенд при выборе покупателем значений тех или иных фильтров должен составить поисковый GET запрос и передать его в метод:

/pub/products

в виде суммы параметров:

?filters=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4  для всех фильтров в блоке OTHER

?attributes=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке ATTRIBUTES

?features=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке FEATURES

где field_name - это значение поля filters.fields.name, field_value - это значение поля filters.fields.stringValues для filters.fields.type: "string" или decimalValues для filters.fields.type: "decimal" или true/false для filters.fields.type: "boolean".

Для filters.fields.type: "decimal" также можно передавать диапазон, указывая начальное и конечное значение через дефис: field_name2:field_value3-field_value4

 

Коллекции

Можно задавать фильтр по коллекциям параметром ?collections=1007,1008 - для фильтрации по id коллекций (можно передавать списком)

 

Архивные карточки

Можно дополнительно выводить архивные карточки товаров параметром deleted=true

 

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/products?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Максимальное количество продуктов - 100. Даже если указано значение более 100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

Сортировка

Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.

Пример сортировки по имени (возрастание): /api/lite/products?order=shortname+asc

Пример сортировки по имени (убывание): /api/lite/products?order=shortname+desc

Доступные коды сортировки:

Пример вызова с одновременной фильтрацией, пейджинацией и сортировкой:

/api/lite/products?query=Поло&order=shortname+asc&page=0&size=200

Структура ответа:

Поле Тип / формат Описание
recordsTotal num Общее количество записей в рамках заданной фильтрации. Используется для пейджинации.

products

array Перечень товарных предложений
id string Идентификатор продукта
extId string Дополнительный идентификатор продукта
extId2 string Дополнительный идентификатор продукта
extId3 string Дополнительный идентификатор продукта
extId4 string Дополнительный идентификатор продукта
extId5 string Дополнительный идентификатор продукта

shortName

string Наименование продукта
description string Описание (может содержать html)
tnvedCode string Код ТНВЭД
internationalDescription string Описание на анлийском
additionalDescriptions array Блоки с дополнительным текстовым описанием
available boolean Отображение для продажи в онлайн-магазине
boxNeeded boolean Требуется обрешётка (при отгрузке товара)
deleted boolean Архивная карточка
type enum Тип продукта. SKU/PHYSICAL_SET/SERVICE.    Товар, набор товаров, услуга
vat enum НДС товара. NO_VAT/VAT_0/VAT_10/VAT_20
reviewScore decimal Оценка товара
variants array Массив вариантов
id string Уникальный идентификатор варианта.
article string Артикул (sku) товара
price decimal Цена продажи
oldPrice decimal "Старая" цена. Для визуализации скидки. 
isFfSynchronised
boolean Статус выгрузки товара на ФФ
ffSyncError
string Ошибка выгрузки товара на ФФ
isPhysicalSet
boolean Является ли товар физическим набором
isFfPhysicalSetSynchronized
boolean Статус выгрузки набора на ФФ
ffPhysicalSetSyncError
string Ошибка выгрузки набора на ФФ
discountPercent
decimal Скидка, в процентах
discountFix
decimal Скидка, фикс
bundleOptionalCount
num Размер опциональной части набора для выбора
autoPriceCalculation
boolean Авторасчет цены набора
autoDimensionsCalculation
boolean Авторасчет габаритов набора
prices object Список всех присвоенных цен
stock array Массив данных об остатках (если остатки на складах имеются)
warehouseCode string Код склада
stockTotal decimal Текущее количество на складе хранения
stockAvailable decimal Количество товара, доступного к продаже (stockTotal за минусом резерва)
stockReserved decimal Количество товара, зарезервированного под заказы.
pos num Порядковый номер варианта, относительно 
optionsUsed array Массив, указывающий соответствие опции и её значения для конкретного продукта. 
defaultImage string Ссылка на изображение из общего массива изображений. Может быть не задан.
weight decimal Вес товара
dimensions object Содержит информацию о размерах
weightFact decimal Вес товара (по данным склада)
dimensionsFact
object Содержит информацию о размерах (по данным склада)
canBeRotated
boolean Определяет можно ли товар укладывать на бок при перевозке
barcodes object Список штрихкодов товара
isDefault boolean ШК является по умолчанию
value string Значение ШК
images array Массив изображений продукта. Первое изображение считается основным.
id string Идентификатор изображения
url string URL изображения
pos decimal Позиция изображения в рамках продукта
collections array Массив коллекций, в которые входит продукт
id string Идентификатор коллекции
attributes array Массив значений атрибутов продукта
code string Код атрибута
type enum Тип атрибута (см. описание атрибутов)
stringValue string Значение атрибута (строка)
decimalValue decimal Значение атрибута (число)
ordering decimal Cортировка
accountingAttributes
array Массив значений атрибутов учета
code
string Код атрибута
title string Название атрибута
stringValue string Значение атрибута
subscriptionInfo object Описание подписок (Не отображается, если пустой)
eshopSettings
array Массив внешних кодов для интеграций
eshopId
string ID интеграции
eshopType
string Тип интеграции
eshopName
string Название интеграции
enabled
boolean Включает товар для интеграции
zeroStock boolean Включает выгрузку нулевых остатков по товару
extId
string Внешний код товара для интеграции
useBatchAccounting boolean

Флаг использования партионного учета

Для ведения учёта сроков годности в партиях необходимо также передать значение USE_EXPIRATION в поле expirationMode и указать срок годности товара в поле expirationMonthsLimit

expirationMode enum NO_EXPIRATION, USE_EXPIRATION - использование сроков годности в партиях
expirationMonthsLimit integer Срок годности в мес
manufacturedBy string Производитель
composition string Состав продукта
warranty integer Срок гарантии в мес
warehouseCategoryCode
string Код категории товара (из WMS)
warehouseCategoryTitle
string Наименование категории товара (из WMS)

 

Пример результата запроса:

{
    "success": true,
    "recordsTotal": 1,
    "products": [
        {
            "id": "1000",
            "extId": null,
          	"extId2": null,
            "extId3": null,
            "extId4": null,
            "extId5": null,
            "shortName": "Кактус Эуфобия Триангуларис",
            "description": "Кактус Эуфобия Триангуларис",
            "tnvedCode": "123",
            "internationalDescription": "abc",
            "additionalDescriptions":[{"title":"some title", "description":"some description"}],
            "available": true,
            "deleted": false,
            "brandName": null,
            "countryOfOrigin": null,
            "isBestseller": null,
            "isNovelty": null,
            "type": "SKU",
            "vat": "VAT_20",
            "reviewScore": 4.0,
            "options": null,
            "images": null,
          	"useBatchAccounting": true,
            "expirationMode": "USE_EXPIRATION",
            "expirationMonthsLimit": 6,
          	"warranty": 12,
            "warehouseCategoryCode": "000000001",
            "warehouseCategoryTitle": "Парфюмерия"
          	"manufacturedBy": "Название производителя",
            "composition": "Состав",            
            "variants": [
                {
                    "id": "1000",
                    "extId": null,
                  	"extId2": null,
                    "extId3": null,
                    "extId4": null,
                    "extId5": null,
                    "article": null,
                    "price": 2190,
                    "oldPrice": 1590,
                    "isFfSynchronised": true,
                    "ffSyncError": null,
                    "isPhysicalSet": false,
                    "isFfPhysicalSetSynchronized": false,
                    "ffPhysicalSetSyncError": null,
                  	"discountPercent": 0,
                    "discountFix": 0,
                    "bundleOptionalCount": 0,
                    "autoPriceCalculation": false,
                    "autoDimensionsCalculation": false,
                  	"prices":[
                        {
                           "priceCode":"Розничная цена",
                           "priceName":"Розничная цена",
                           "value":2190
                        },
                      	{
                           "priceCode":"Цена до скидки",
                           "priceName":"Цена до скидки",
                           "value":1590
                        }
                     ],
                    "stock": [
                        {
                            "warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
                            "stockTotal": 111,
                            "stockAvailable": 111,
                            "stockReserved": 0
                        }
                    ],
                    "ordering": "123.000000000000000",
                    "defaultImage": null,
                    "weight": 500,
                    "dimensions": {
                        "height": 4,
                        "width": 20,
                        "depth": 4
                    },
                    "weightFact": 500,
                    "dimensionsFact": {
                        "height": 4,
                        "width": 20,
                        "depth": 4
                    },
                    "canBeRotated": true,
                    "barcodes": [
                        {
                            "value": "42353456345345",
                            "isDefault": true,
                            "type": "COMMON"
                        },
                        {
                            "value": "34234232343",
                            "isDefault": false,
                          	"type": "WILDBERRIES"
                        }
                    ],                 
                    "optionsUsed": null,
                  	"eshopSettings": [
                        {
                            "eshopId": "e4a1920d-f154-7284-bad4-a7b9546032fe",
                            "eshopType": "BERU",
                            "eshopName": "Магазин на Беру",
                            "enabled": true,
                          	"zeroStock": false,
                            "extId": "variant-ext-id-for-beru"
                        }
                    ]
                }
            ],
            "collections": [
                "1001"
            ],
            "attributes": null,
            "accountingAttributes": [
                {
                    "code": "chestnyznak",
                    "title": "Честный знак",
                    "stringValue": "11111"
                }
            ],
          	"eshopSettings": [
                {
                  "eshopId": "e4a1920d-f154-7284-bad4-a7b9546032fe",
                  "eshopType": "BERU",
                  "eshopName": "Магазин на Беру",
                  "enabled": true,
                  "extId": "product-ext-id-for-beru"
                }
            ]
          	"subscriptionInfo": {
              "productId": "1002",
              "variantId": "1002",
              "onlinePaymentType": "recurrent",
              "type": "SUBSCRIPTION",
              "useShipmentDelayInterval": true,
              "items": [
                  {
                      "productId": "1002",
                      "variantId": "1006",
                      "count": 1,
                      "subscriptionShipmentNum": 1,
                      "shipmentDelayIntervalDays": 30,
                      "subscriptionStartDate": "2020-09-10",
                      "itemPrice": 120.0
                  },
                  {
                      "productId": "1002",
                      "variantId": "1007",
                      "count": 1,
                      "subscriptionShipmentNum": 1,
                      "shipmentDelayIntervalDays": 30,
                      "subscriptionStartDate": "2020-09-10",
                      "itemPrice": 120.0
                  },
                  {
                      "productId": "1002",
                      "variantId": "1008",
                      "count": 1,
                      "subscriptionShipmentNum": 2,
                      "shipmentDelayIntervalDays": 20,
                      "subscriptionStartDate": "2020-09-30",
                      "itemPrice": 150.0
                  },
                  {
                      "productId": "1002",
                      "variantId": "1009",
                      "count": 1,
                      "subscriptionShipmentNum": 2,
                      "shipmentDelayIntervalDays": 20,
                      "subscriptionStartDate": "2020-09-30",
                      "itemPrice": 150.0
                  },
                  {
                      "productId": "1002",
                      "variantId": "1010",
                      "count": 1,
                      "subscriptionShipmentNum": 3,
                      "shipmentDelayIntervalDays": 20,
                      "subscriptionStartDate": "2020-10-20",
                      "itemPrice": 250.0
                    }
                   ]
                }
          }
        }
    ]
}

Выгружать только остатки (специальный режим выгрузки)

Дополнительно можно передать параметр ?only_stock=true. Если он присутствует в запросе, то выгружается минимально необходимое кол-во полей.

Пример: /api/lite/products?only_stock=true

Максимальное количество продуктов в режиме остатков - 1000. Даже если указано значение более 1000

Пример результата запроса(режим остатков):

{
    "success": true,
    "recordsTotal": 1322,
    "products": [
        {
            "id": "1000",
            "extId": null,
            "extId2": null,
            "extId3": null,
            "extId4": null,
            "extId5": null,
            "variants": [
                {
                    "id": "1000",
                    "extId": null,
                    "extId2": null,
                    "extId3": null,
                    "extId4": null,
                    "extId5": null,
                    "stock": [
                        {
                            "warehouseCode": "5a93f7e7-4785-0332-8324-bf3a03ee8211",
                            "stockTotal": 10,
                            "stockAvailable": 8,
                            "stockReserved": 2,
                            "stockDefective": 0,
                            "stockDefectiveReserved": 0
                        }
                    ]
                }
            ]
        }
    ]
}

 

 

Создание/обновление продукта (POST /api/lite/products)

/api/lite/products

Создает или обновляет продукт.

Если id указан - проводится обновление продукта с указанным id, если не указан - создается новый.

Если проводится обновление продукта (или варианта) - то обновляются все поля на те, что переданы. Если какие то поля в продукте были непустые, а в запросе они не переданы - то после обновления поля очищаются.

Опционально можно передавать список вариантов товара для обновления, в поле variantsToUpdate. Обновление продукта выполняется первым, если успешно - то начинается обновление вариантов.

Этот список не означает, что коллекция вариантов данного продукта будет приведена к виду в переданном списке вариантов. Будет выполнено только обновление указанных вариантов, безотносительно остальных вариантов их продукта.

Если передан список вариантов - то в ответе в поле variantsResult будет список результатов обновления по каждому варианту, для сопоставления на вызывающей стороне (по полям productId + variantId)

Поле Тип / формат

Описание

id string

Идентификатор продукта. Если не указан, создается новый продукт. Если указан, обновляется продукт с данным id или создаётся новый продукт с пользовательским id.

extId string Дополнительный идентификатор продукта
shortName string Наименование продукта
description string Описание (может содержать html)
tnvedCode string Код ТНВЭД
internationalDescription string Описание на анлийском
available boolean Отображение для продажи в онлайн-магазине
deleted boolean Архивная карточка
type enum Тип продукта. SKU/PHYSICAL_SET/SERVICE.    Товар, набор товаров, услуга
vat enum НДС товара. NO_VAT/VAT_0/VAT_10/VAT_20
collections array Массив идентификаторов коллекций, в который входит данный продукт
attributes array Массив значений атрибутов продукта
code string Код атрибута
stringValue string Значение атрибута (строка)
decimalValue decimal Значение атрибута (число)
accountingAttributes array Массив значений атрибутов учета
code string Код атрибута
stringValue string Значение атрибута
eshopSettings
array Массив внешних кодов для интеграций
eshopId
string ID интеграции
enabled boolean Включает товар для интеграции
extId
string Внешний код продукта для интеграции
variantsToUpdate объект Объект варианта товара (см. POST /api/lite/products/variants)
warehouseCategoryCode string Код категории товара (из WMS)

 

Пример вызова:

Пример запроса
{
      "id": "1015",
      "extId": "FAQ-D-000112",
      "extId2": null,
      "extId3": null,
      "extId4": null,
      "extId5": null,
      "shortName": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
      "description": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
  	  "additionalDescriptions":[{"title":"some title", "description":"some description"}],
      "available": true,
      "deleted": false,
      "brandName": null,
      "countryOfOrigin": null,
      "tnvedCode": "123",
      "internationalDescription": "abc",
      "isBestseller": null,
      "isNovelty": null,
      "type": "SKU",
      "vat": "NO_VAT",
      "warehouseCategoryCode": "000000001",
    "collections": [
        "1029",
        "1031"
    ], 
    "attributes": [
        {
            "code": "material",        
            "stringValue": "Хлопок 97%, эластан 3%"        
        }
    ],
    "accountingAttributes": [
        {
          "code": "chestnyznak",
          "stringValue": "11111"
        }
    ],
  	"eshopSettings": [
        {
          "eshopId": "e4a1920d-f154-7284-bad4-a7b9546032fe",
          "enabled": true,
          "extId": "product-ext-id-for-beru"
        }
    ],
    "variantsToUpdate": [
            {
                    "productId":"1002",
                    "variantId": "1007",
              		"extId": null,
                    "extId2": null,
                    "extId3": null,
                    "extId4": null,
                    "extId5": null,
                    "article": "well done",
                    "price": 6000, //deprecated
                    "oldPrice": 6500, //deprecated
              		"prices":[
                        {
                           "priceCode":"Розничная цена",
                           "value":6000
                        },
                      	{
                           "priceCode":"Цена до скидки",
                           "value":6500
                        }
                     ],
                    "stock": [
                        {
                           "warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",                         
                           "stockTotal": 111                          
                        }
                    ],
                    "updateStockTotal": true,                  
                    "ordering": "300.000000000000000",
                    "defaultImage": null,
                    "weight": 500,
                    "dimensions": {
                        "height": 30,
                        "width": 31,
                        "depth": 32
                    },
                    "canBeRotated": true,
                    "optionsUsed": [
                        {
                            "code": "color",
                            "stringValue": "синий",
                            "decimalValue": null,
                            "name": "Цвет"
                        }
                    ],
                    "eshopSettings": [
                        {
                          "eshopId": "e4a1920d-f154-7284-bad4-a7b9546032fe",
                          "enabled": true,
                          "extId": "variant-ext-id-for-beru"
                        }
                    ],
              		"discountType": "PERCENT", // FIX
              		"discountValue": 50
                }
        ]
}

Пример положительного ответа:

В зависимости от состояния конфига needApiProductsReturnDetails в настройках аккаунта(http://app.kak2c.ru/#!settings/lite) есть два варианта ответа: развернутый и сокращенный. Время выполнения сокращенного ответа значительно меньше, что позволяет загружать товары большими массивами. По умолчанию новые аккаунты создаются с сокращенным вариантом ответа.
Пример сокращенного ответа:
{
    "success": true,
    "id": "1002"
}
Пример развернутого ответа:
{
    "success": true,
    "id": "1002",
    "product": {
        "id": "1002",
        "extId": "FAQ-D-000112",
        "extId2": null,
        "extId3": null,
        "extId4": null,
        "extId5": null,
        "shortName": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
        "description": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
      	"additionalDescriptions":[{"title":"some title", "description":"some description"}],
        "available": true,
        "deleted": false,
        "brandName": null,
        "countryOfOrigin": null,
        "tnvedCode": "123",
        "internationalDescription": "abc",
        "isBestseller": null,
        "isNovelty": null,
        "type": "SKU",
        "vat": "NO_VAT",
        "reviewScore": null,
        "options": null,
        "images": null,
        "variants": [
            {
                "productId":"1002",
                "variantId": "1007",
              	"extId": null,
                "extId2": null,
                "extId3": null,
                "extId4": null,
                "extId5": null,
                "article": "well done",
                "price": 6000,
                "oldPrice": 6500,
              	"prices":[
                        {
                           "priceCode":"Розничная цена",
                           "priceName":"Розничная цена",
                           "value":6000
                        },
                      	{
                           "priceCode":"Цена до скидки",
                           "priceName":"Цена до скидки",
                           "value":6500
                        }
                     ],
                "stock": [
                        {
                            "warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
                            "stockTotal": 111,
                            "stockAvailable": 111,
                            "stockReserved": 0
                        }
                    ],
                "ordering": "300.000000000000000",
                "defaultImage": null,
                "weight": 500,
                "dimensions": {
                    "height": 30,
                    "width": 31,
                    "depth": 32
                },
                "barcodes": null,
                "vat": "NO_VAT",
                "type": "SKU",
                "optionsUsed": [
                    {
                        "code": "color",
                        "stringValue": "синий",
                        "decimalValue": null,
                        "name": "Цвет"
                    }
                ]
            }
        ],
        "collections": [
            "1029",
            "1031"
        ], 
        "attributes": [
            {
                "code": "material",        
                "stringValue": "Хлопок 97%, эластан 3%"        
            }
        ],
        "accountingAttributes": [
            {
              "code": "chestnyznak",
              "title": "Честный знак",
              "stringValue": "11111"
            }
        ],
    },
    "variantsResult": [
        {
            "success": true,
            "productId": "1002",
            "variantId": "1003"
        }
    ]
}

 

Пример положительного ответа с ошибкой сохранения по указанному варианту:

Пример ответа
{
    "success": true,
    "id": "1002",
    "variantsResult": [
        {
            "success": false,
            "errors": [
                {
                    "code": 0,
                    "message": "Вариант с указанным id не найден"
                }
            ],
            "productId": "1002",
            "variantId": "100343"
        }
    ],
    "product": {
        "id": "1002",
        "extId": "FAQ-D-000112",
      	"extId2": null,
        "extId3": null,
        "extId4": null,
        "extId5": null,
        "shortName": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
        "description": "Limited Edition Паста (помада) для укладки волос Bro Cosmetics // средняя фиксация, матовый эффект",
        "available": true,
        "deleted": false,
        "brandName": null,
        "countryOfOrigin": null,
        "tnvedCode": "123",
        "internationalDescription": "abc",
        "isBestseller": null,
        "isNovelty": null,
        "type": "SKU",
        "vat": "NO_VAT",
        "reviewScore": null,
        "options": null,
        "images": null,
        "variants": [
            {
                "productId":"1002",
                "variantId": "1007",
               	"extId": null,
                "extId2": null,
                "extId3": null,
                "extId4": null,
                "extId5": null,
                "article": "well done",
                "price": 6000,
                "oldPrice": 6500,
                "stock": [
                        {
                            "warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
                            "stockTotal": 111,
                            "stockAvailable": 111,
                            "stockReserved": 0
                        }
                    ],
                "ordering": "300.000000000000000",
                "defaultImage": null,
                "weight": 500,
                "dimensions": {
                    "height": 30,
                    "width": 31,
                    "depth": 32
                },
                "barcodes": null,
                "vat": "NO_VAT",
                "type": "SKU",
                "optionsUsed": [
                    {
                        "code": "color",
                        "stringValue": "синий",
                        "decimalValue": null,
                        "name": "Цвет"
                    }
                ]
            }
        ],
        "collections": [
            "1029",
            "1031"
        ], 
        "attributes": [
            {
                "code": "material",        
                "stringValue": "Хлопок 97%, эластан 3%"        
            }
        ],
        "accountingAttributes": [
            {
              "code": "chestnyznak",
              "title": "Честный знак",
              "stringValue": "11111"
            }
        ],
    }
}

 

Обновление отдельных полей продукта (PATCH /api/lite/products)

/api/lite/products

Обновляет одно или несколько полей продукта, значения отсутствующих в запросе полей при этом не изменяются.

Тело запроса аналогично POST /api/lite/products

id - необходимо указывать обязательно

Пример вызова:

Пример запроса
{
      "id": "1015",
      "shortName": "Limited Edition Паста (помада) для укладки волос",
  	  "internationalDescription": "abc"
}

ответ аналогичен POST /api/lite/products

 

Копирование продукта

/api/lite/products/copy

id - код существующего продукта для копирования

 

Запрос

{
     "id": "1234"            
}

 

Пример успешного ответа

{
    "success": true,
    "id": "1234-copy"
}

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}

 

 

Товары

/api/lite/products/attributes

Атрибуты – дополнительные характеристики для описания номенклатуры. Используются для более полного отображения информации и продукте - в карточке продукта, а также для возможности фильтрации в каталоге товаров. Не являются обязательными к заполнению.

Справочник атрибутов является общим для аккаунта.

Атрибуты бывают строковыми и числовыми (в том числе могут быть дробными).

Значения атрибутов задаются в информации о продуктах.

 

Запрос справочника атрибутов

/api/lite/products/attributes

Метод возвращает список всех доступных атрибутов.

Поле Тип / формат Описание
id string Идентификатор атрибута. 
code string Код атрибута - латиницей
title string Наименование атрибута
type enum

Тип значения атрибута:

  • string
  • decimal

 

Пример результата запроса:

{
    "success": true,
    "attributes": [
        {
            "id": "12345679",
            "code": "roasting",
            "title": "Степень обжарки",
            "type": "string",
            "ordering": 12,
             "values": [
                        {
                            "stringValue": "XXL",
                            "ordering": 4
                        },
                        {
                            "stringValue": "XL",
                            "ordering": 3
                        }                      
                    ]
        },
        {
            "id": "12345",
            "code": "coffee_strength",
            "title": "Крепость кофе",
            "type": "decimal",
            "ordering": 1211,
            "values": [
                        {
                            "decimalValue": 1.3,
                            "ordering": 100
                        },
                        {
                            "decimalValue": 2.5,
                            "ordering": 200
                        }                      
                    ]
        }
    ]
}

 

Создание/обновление атрибута

/api/lite/products/attributes

Создает или обновляет атрибут.

ID атрибута при создании/обновлении - обязательное поле, он задается явно для каждого атрибута.

 

Пример создания/обновления атрибута:

{
    "code": "roasting",
    "title": "Степень обжарки",
    "type": "string",
    "ordering": 1211,
    "values": [
                        {
                            "stringValue": "XXL",
                            "ordering": 4
                        },
                        {
                            "stringValue": "XL",
                            "ordering": 3
                        }                     
                    ]
}
Товары

/api/lite/products/features

По продуктам можно задавать варианты, и есть справочник опций и их значений на каждого клиента, по которым можно для продуктов устанавливать варианты.

Создать/обновить вариант со значением опции, не указанными в таком справочнике - можно, новое значение опции не попадет в общий справочник

Запрос списка опций

/api/lite/products/features

Метод возвращает справочник всех опций и их значений для клиента

Поле Тип / формат Описание
id string Идентификатор опции
code string Читаемый код опции
title string Читаемое наименование  опции
type string Тип опции (string/decimal)
values array Список значений опции
stringValue string Значение опции (строка)
decimalValue decimal Значение опции (число)
ordering decimal сортировка

 

Пример результата запроса:

{
    "success": true,
    "features": [
                {
                    "id": "a2ebf183-f30d-417b-af89-e3ff86d2cca7",
                    "code": "size",
                    "title": "Размер",                  
                    "type": "string",
                    "values": [
                        {
                            "stringValue": "XXL",
                            "ordering": 4
                        },
                        {
                            "stringValue": "XL",
                            "ordering": 3
                        }                      
                    ]
                },
                {
                    "id": "a2ebf183-f30d-417b-af89-e3ff86d2cca8",
                    "code": "coef",
                    "title": "Тестовый коэффициент",                  
                    "type": "decimal",
                    "values": [
                        {
                            "decimalValue": 1.3,
                            "ordering": 100
                        },
                        {
                            "decimalValue": 2.5,
                            "ordering": 200
                        }                      
                    ]
                }
            ]
}

 

Создание/обновление опции

/api/lite/products/features

Создает или обновляет опцию.

Поле code опции при создании/обновлении - обязательное поле, он задается явно для каждой опции.

Список значений опции при создании - необязателен

 

Пример создания/обновления атрибута:

{
    "id": "a2ebf183-f30d-417b-af89-e3ff86d2cca7",
    "code": "size",
    "title": "Размер",                 
    "type": "string",
    "values": [
                        {
                            "stringValue": "XXL",
                            "ordering": 4
                        },
                        {
                            "stringValue": "XL",
                            "ordering": 3
                        }                      
                    ]
}
Товары

/api/lite/products/filters

Получение блоков фильтров

/api/lite/products/filters

Возвращает для заданной коллекции перечень блоков и фильтров в них для поиска товаров.

Блоки бывают трех типов - Для атрибутов, для опций, и другие. Атрибуты и опции выделены в отдельные блоки ввиду потенциально большого количества справочников и значений в них.

Блоки можно запрашивать в режиме для покупателя и для владельца магазина.

В режиме для покупателя - загрузится список вручную сформированных блоков фильтров и выбранных значений фильтров, которые нужно отобразить покупателю.

В режиме для продавца - загрузятся автоматически сформированные блоки со всеми фильтрами и со всеми значениями фильтров и справочников в них - это будет использовать продавец для ручного поиска товаров для формирования заказов или других сценариях использования поиска товаров.

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

Обязательный параметр запроса - ?collectionId=123

Опциональный параметр - режим запроса - под покупателем или под продавцом. По умолчанию - под покупателем

?mode=client или ?mode=customer

Фронтенд при выборе покупателем значений тех или иных фильтров должен составить поисковый GET запрос и передать его в метод:

/pub/products

в виде суммы параметров:

?filters=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке OTHER

?attributes=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке ATTRIBUTES

?features=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке FEATURES

где field_name - это значение поля filters.fields.name, field_value - это значение поля filters.fields.stringValues для filters.fields.type: "string" или decimalValues для filters.fields.type: "decimal" или true/false для filters.fields.type: "boolean".

Для для filters.fields.type: "decimal" также можно передавать диапазон указывая начальное и конечное значение через дефис: field_name2:field_value3-field_value4


Поля возвращаемого значения:

Параметр Тип / формат Описание
filterBlocks array Массив блоков
id string Идентификатор блока
type enum Тип блока. ATTRIBUTES (только атрибуты товаров), FEATURES (только опции товаров), OTHER (остальные поля товаров)
mode enum

Режим работы блока. CUSTOMER (покупатель, отображены выбранные продавцом фильтры в блоке), CLIENT (продавец - отображены все возможные поля и блоки)

ordering integer Сортировка
collectionId string Идентификатор коллекции к которой относится данный блок фильтров
filters Массив Перечень фильтров в блоке
enabled boolean Виден на витрине
type enum Тип фильтра. PRICE, STOCK_AVAILABLE, SIZE_WIDTH, SIZE_DEPTH, SIZE_HEIGHT, WEIGHT, COUNTRY_OF_ORIGIN, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND, IS_BESTSELLER, 
ordering integer Сортировка
fields Массив Поля фильтра
name string Наименование поля
nameReadable string Наименование поля для пользователя
type enum Тип поля. string, decimal, boolean 
ordering integer Сортировка
stringValues Массив Массив строковых значений поля
decimalValues Массив Массив числовых значений поля

 

Пример ответа:

{
    "success": true,
    "filterBlocks": [
        {
            "id": "1029",
            "type": "OTHER", // ATTRIBUTES, FEATURES
            "mode": "CUSTOMER", //CLIENT
            "ordering": 10,
            "collectionId": "123456"
            "filters":[
                {
                    "type":"PRICE",  // STOCK_AVAILABLE, SIZE_WIDTH, SIZE_DEPTH, SIZE_HEIGHT, WEIGHT, COUNTRY_OF_ORIGIN, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND,   IS_BESTSELLER
                    "enabled": true,
                    "ordering": 10,
                    "fields":[
                        {
                            "name" : "field1",
                            "nameReadable": "Поле 1",
                            "type": "string", // decimal, boolean
                            "ordering": 10,
                            "stringValues": [
                                "value1", "value2"
                            ]
                        },
                        {
                            "name" : "field2",
                            "nameReadable": "Поле 2",
                            "type": "decimal",
                            "ordering": 11,
                            "decimalValues": [
                                15.2, 16.8
                            ]
                        },
                        {
                            "name" : "field3",
                            "nameReadable": "Поле 3",
                            "type": "boolean",
                            "ordering": 12                             
                        }
                    ]
                }
            ]
        }
    ]
}

 

Создание/обновление блока фильтров

/api/lite/products/filters

Создает или обновляет блок фильтров для покупателя. 

Фильтры для продавца создаются и заполняются автоматом.

Если id указан - проводится обновление блока фильтров с указанным id, если не указан - создается новый блок.

Есть проверка - фильтры с типом ATTRIBUTES или FEATURES - можно добавлять только в отдельные блоки с аналогичными типами, в которых нет других фильтров

Поля в блоках фильтров (кроме типов ATTRIBUTES, FEATURES) отдельно не задаются, их бэкенд добавит автоматически по типу фильтра.

 

Пример обновления блока:

{
            "id": "1029",
            "type": "OTHER", // ATTRIBUTES, FEATURES           
            "ordering": 10,
            "collectionId": "123456"
            "filters":[
                {
                    "type":"PRICE",  // STOCK_AVAILABLE, SIZE_WIDTH, SIZE_DEPTH, SIZE_HEIGHT, WEIGHT, COUNTRY_OF_ORIGIN, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND,       IS_BESTSELLER
                    "enabled": true,
                    "fields":[   // только для ATTRIBUTES, FEATURES
                        {
                            "name" : "field1",
                            "nameReadable": "Поле 1",
                            "type": "string", // decimal, boolean
                            "ordering": 10,
                            "stringValues": [
                                "value1", "value2"
                            ]                          
                        },
                        {
                            "name" : "field2",
                            "nameReadable": "Поле 2",
                            "type": "decimal",
                            "ordering": 11,
                            "decimalValues": [
                                15.2, 16.8
                            ]                          
                        },
                        {
                            "name" : "field3",
                            "nameReadable": "Поле 3",
                            "type": "boolean",
                            "ordering": 12                             
                        }
                    ]                  
                }
            ]
}

 

Пример ответа:

{
    "success": true,
    "id": "1029"       
}

 

Удаление блока фильтров

/api/lite/products/filters

Для удаления блока фильтров, выполняется следующий DELETE запрос с указанием идентификатора блока в параметре id

В ответ возвращается результат операции и id удаленного блока.

 

Пример успешного ответа:

{
  "success": true,
  "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}

 

Пример ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Блока фильтров с указанным id не существует"
    }
  ]
}
Товары

/api/lite/products/image

Создание картинки к продукту (/api/lite/products/image)

/api/lite/products/image

Загружает на сервер картинку и привязывает изображение к товару.

Используется заголовок запроса Content-type: multipart/form-data.

В качестве параметров запроса передается:

На стороне сервера:

В ответ возвращается информация о загруженной картинке:

 

Успех

{
    "success": true,
    "url": "https://img.kak2c.ru/i/H/E/Y8x2a2Zj.jpg",
    "id": "42737a4a-8f76-4aa6-a3d1-ae553f2409cb",
    "pos": "10000.000000000000000"
}

Параметры:

 

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Удаление картинки у товарного предложения (/api/lite/products/image)

/api/lite/products/image

Для удаления метки, выполняется следующий DELETE запрос с указанием идентификатора картинки в параметре id

В ответ возвращается результат операции и id удаленной картинки.

 

Пример успешного ответа:

{
"success": true,
"id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}

В случае ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Картинки с указанным id не существует"
    }
  ]
}

 

Обновление позиции картинки (/api/lite/products/image/pos)

/api/lite/products/image/pos

Обновляет значение позиции для сортировки картинок в списке

 

Запрос:

{
  "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
  "pos": 123.456
}

 

Ответ:

{
  "success": true
}

 

В случае ошибки:

{
"success": false,
"errors": [
{
"code": 0,
"message": "текст ошибки"
}
]
}
Товары

/api/lite/products/variants

У каждого продукта есть хотя бы один вариант.

Вариант – реальный товар, имеющий характеристики, вес, размеры.

 

Создание/редактирование варианта (POST /api/lite/products/variants)

/api/lite/products/variants

Создает или обновляет вариант к указанному продукту.

Поле Тип\формат Описание
productId string Идентификатор продукта, для которого создаются варианты
variantId string Идентификатор варианта для обновления. Если не указан, создается новый вариант.
extId string Дополнительный редактируемый код варианта.
article string Артикул производителя товара.
price decimal Цена розничной продажи. [deprecated]
oldPrice decimal "Старая цена" - используется для отображения перечеркнутой цены. [deprecated]
prices object Список цен
defaultImage string Ссылка на стандартное изображение варианта (из набор изображений продукта).
ordering double Число для сортировки между вариантами
optionsUsed array Массив используемых опций данным вариантом
code string Код варианта
stringValue string Значение опции варианта (строка)
decimalValue decimal Значение опции варианта (число)
weight decimal Вес товара в граммах
dimensions object Объект с характеристиками размеров товара. Задается в сантиметрах.
barcodes array Список ШК варианта
stock object Объект со списком кодов складов и остатков товаров на них
warehouseCode string Код склада
stockTotal integer

Опционально - установить общее количество товара в штуках на складе по умолчанию, включая количество в резерве. Только в сочетании с флагом updateStockTotal = true

updateStockTotal boolean

Флаг активации корректировки общего количества товара из поля stockTotal на складе по умолчанию

Пример вызова:

Пример запроса
{
    "productId": "1002",
    "variantId": "1024",
    "article": "POLO92/L/ЖЕЛ",
    "price": 990, //deprecated
    "oldPrice": 1200, //deprecated
  	"prices":[
      {
        "priceCode":"Розничная цена",
        "value":990
      },
      {
        "priceCode":"Цена до скидки",
        "value":1200
      }
    ],
    "defaultImage": "8b16a469-2b8c-4df4-85f2-c9c9afa1f921",
    "ordering": "123.123"
    "optionsUsed": [
        {
            "code": "size",
            "stringValue": "L"
        },
        {
            "code": "color",
            "stringValue": "желтый"
        }
    ],
    "weight": 500,
    "dimensions": {
        "height": 5,
        "width": 5,
        "depth": 10
    },
    "barcodes": [
                        {
                            "value": "42353456345345",
                            "isDefault": true,
                            "type": "COMMON"
                        },
                        {
                            "value": "34234232343",
                            "isDefault": false,
                          	"type": "WILDBERRIES"
                        }
     ],                 
     "stock": [
                        {
                            "warehouseCode": "9a84e96f-3e8c-8f74-3b7a-50a1d3c2a130",
                            "stockTotal": 111                          
                        }
                    ],
     "updateStockTotal":false
}

Обновление отдельных полей варианта(PATCH /api/lite/products/variants)

/api/lite/products/variants

Обновляет одно или несколько полей варианта, значения отсутствующих в запросе полей при этом не изменяются.

Тело запроса аналогично POST /api/lite/products/variants

productId и variantId - необходимо указывать обязательно

Пример вызова:

Пример запроса
{
	"productId":"1002",
	"variantId":"1024",
	"barcodes":[
		{
			"value":"42353456345345",
			"isDefault":true,
			"type":"COMMON"
		}
	]
}

ответ аналогичен POST /api/lite/products/variants

Удаление варианта (DELETE /api/lite/products/variants)

/api/lite/products/variants

Удаляет вариант продукта.

Невозможно удалить единственный вариант продукта. Также, невозможно удалить вариант, у которого есть складские остатки.

Параметры запроса: productId - код продукта, variantId - код варианта

 

Упорядочить значения опций продукта (POST /api/lite/product/options/reorder)

/api/lite/product/options/reorder

Упорядочивает значения опций для указанного продукта.

Если данной опции не существует - значение пропускается.

Поле Тип\формат Описание
productId string Идентификатор продукта, для которого создаются варианты
options array Массив опций
code string

Код опции

values string Массив значений для данной опции в требуемом порядке.

Пример вызова:

Пример запроса
{
"productId": "1002",
"options": [
{
"code": "size",
"values": [
"S",
"M",
"L",
"XL"
]
},
{
"code": "color",
"values": [
"желтый",
"красный",
"синий",
"бело-синий"
]
}
]
}
Товары

/api/lite/file/image

Закачка картинки в облако

/api/lite/file/image

Закачка картинки в облако и получение url

Одновременно выполняет ресайз картинки в несколько разрешений, аналогично методу POST /api/lite/products/image

Принимает файл в виде multipart запроса в параметре upfile.

Хедер - только Authorization

 

Пример из Postman:

 

Пример ответа:

{
"success": true,
"url": "https://storage.yandexcloud.net/images-k2c/66ac26ec-08b2-4d4a-ae22-44c182847984.jpg",
"id": "66ac26ec-08b2-4d4a-ae22-44c182847984.jpg"
}
Товары

/api/lite/pub/products

Запрос указанного продукта (публичный)

/api/lite/pub/products

Метод возвращает продукты с вариантами.

Продукт всегда содержит хотя бы один вариант.

 

Фильтрация по полям товара:

Можно задавать фильтр параметром ?query=test - для фильтрации по полям article , humanId, shortName

Дополнительно можно фильтровать по конкректному продукту параметром ?id=1000

Также можно запрашивать конкретный вариант продукта полями variantId и variantExtId 

Параметр available позволяет фильтровать скрытые товары. Если флаг не передан, скрытые товары не филтьруются(отображаются активные + скрытые)

 

Фильтрация по фильтрам, атрибутам, вариантам товара:

Фронтенд при выборе покупателем значений тех или иных фильтров должен составить поисковый GET запрос и передать его в метод GET /pub/products

в виде суммы параметров:

?filters=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке OTHER

?attributes=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке ATTRIBUTES

?features=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке FEATURES

где field_name - это значение поля filters.fields.name, field_value - это значение поля filters.fields.stringValues для filters.fields.type: "string" или decimalValues для filters.fields.type: "decimal" или true/false для  filters.fields.type: "boolean".

Для для filters.fields.type: "decimal"  также можно передавать диапазон указывая начальное и конечное значение через дефис: field_name2:field_value3-field_value4

 

Коллекции

Можно задавать фильтр по коллекциям параметром ?collections=1007,1008 - для фильтрации по id коллекций (можно передавать списком)

 

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/products?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

 

Сортировка

Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.

Пример сортировки по имени (возрастание): /api/lite/products?order=shortname+asc

Пример сортировки по имени (убывание): /api/lite/products?order=shortname+desc

Доступные коды сортировки:

Пример вызова с одновременной фильтрацией, пейджинацией и сортировкой:

/api/lite/products?query=Поло&order=shortname+asc&page=0&size=200

 

Последовательность применения поисковых критериев:

  1. Если задан id продукта - поиск идет только по нему. Выход из поиска
  2. Если задан variantId конкретного варианта товара - поиск идет по нему (по внутреннему или внешнему коду варианта, согласно настройке аккаунта). Выход из поиска
  3. Если заданы параметры filters, attributes, features - будет поиск по ним (включая совместно по их комбинациям).  Если одновременно задан параметр collections - он будет учтен. Выход из поиска
  4. Если заданы параметры query или collections - будет поиск по ним (включая совместно по обоим). Выход из поиска
  5. Иначе выводятся все продукты с учетом запрошенного флага deleted
Поле Тип\формат Описание
recordsTotal num Общее количество записей в рамках заданной фильтрации. Используется для пейджинации.

products

array Перечень товарных предложений
id string Идентификатор продукта
extId string Внешний код продукта
shortName string Наименование продукта
description string Описание (может содержать html)
available boolean Отображение для продажи в онлайн-магазине
deleted boolean Архивная карточка
reviewScore decimal Оценка товара
variants array Массив вариантов
id string Уникальный идентификатор варианта.
extId string Внешний код варианта
article string Артикул (sku) товара
price decimal Цена продажи
oldPrice decimal "Старая" цена. Для визуализации скидки. 
stock object Остатки товара на всех складах
     
pos num Порядковый номер варианта, относительно 
optionsUsed array Массив, указывающий соответствие опции и её значения для конкретного продукта. Значения указываются как ссылки на значение из общего словаря опций.
defaultImage string Ссылка на изображение из общего массива изображений. Может быть не задан.
weight decimal Вес товара
dimensions object Содержит информацию о размерах
options array Словарь возможных опций для продукта, и также значений опций. Каждое значение опции имеет собственный идентификатор.
id string Идентификатор опции
name string Наименование
name_plural string Наименование во множественном числе
values array Массив значений данной опции
images array Массив изображений продукта. Первое изображение считается основным.
id string Идентификатор изображения
url string URL изображения
pos decimal Позиция изображения в рамках продукта
collections array Массив коллекций, в которые входит продукт
id string Идентификатор коллекции
attributes array Массив значений атрибутов продукта
id string Идентификатор атрибута
type enum Тип атрибута (см. описание атрибутов)
stringValue string Значение атрибута (строка)
decimalValue decimal Значение атрибута (число)
ordering decimal Cортировка
anyPublicCollections boolean Есть хотя бы одна коллекция в каталоге с этим товаром

 

Пример результата запроса:

{
    "success": true,
    "recordsTotal": 2,
    "products": [
        {
            "id": "1002",
            "extId": "",
            "shortName": "Футболка",
            "description": "<p><h1><strong>Лучшие</strong> футболки</h1><br></p>",
            "available": true,
            "deleted": false,
            "reviewScore": 4.0,
          	"anyPublicCollections": true,
            "variants": [
                {
                    "id": "1005",
                    "extId": null,
                    "article": "",
                    "price": 990,
                    "oldPrice": 1200,
                    "stock": [
                      {
                        "warehouseCode": "a8064680-6f8c-830c-1ea1-0ab8a032e244",
                        "stockTotal": 40,
                        "stockAvailable": 38,
                        "stockReserved": 2
                      }
                    ],
                    "ordering": 1,
                    "optionsUsed": [
                        {
                            "id": "size",
                            "value": "L"
                        }
                    ],
                    "defaultImage": "8b16a469-2b8c-4df4-85f2-c9c9afa1f921",
                    "weight": 500,
                    "dimensions": {
                        "height": 5,
                        "width": 5,
                        "depth": 10
                    }
                },
                {
                    "id": "1006",
                    "extId": null,
                    "article": "",
                    "price": 990,
                    "oldPrice": 1200,
                     "stock": [
                      {
                        "warehouseCode": "a8064680-6f8c-830c-1ea1-0ab8a032e244",
                        "stockTotal": 40,
                        "stockAvailable": 38,
                        "stockReserved": 2
                      }
                    ],
                    "ordering": 2,
                    "optionsUsed": [
                        {
                            "id": "size",
                            "value": "M"
                        }
                    ],
                    "defaultImage": null,
                    "weight": 500,
                    "dimensions": {
                        "height": 5,
                        "width": 5,
                        "depth": 10
                    }
                }
            ],         
            "images": [
                {
                    "id": "8b16a469-2b8c-4df4-85f2-c9c9afa1f921",
                    "url": "https://img.kak2c.ru/i/f/g/IA33pVkwd.jpg?1564511037",                                      
                    "pos": "10000.000000000000000"                 
                },
                {
                    "id": "8b16a469-2b8c-4df4-85f2-c9c9afa1b323",
                    "url": "https://img.kak2c.ru/i/f/g/IA33pVkw.jpg?1564511037",                   
                    "pos": "5000.00000"                
                }
            ],
            "collections": [
                "1029", "1031"
            ],
            "attributes": [
                {
                    "id": "material",
                    "type": "string",
                    "stringValue": "Хлопок 97%, эластан 3%",
                    "ordering": 1
                }
            ]
        }
    ]
}

 

Запрос списка брендов по всем продуктам (публичный)

/api/lite/pub/products/brands

Параметр

 

Тип\формат Описание

searchString

string (необязательный)

Запрос возвращает список всех существующих брендов магазина. Если задан параметр 'searchString' - возвращает только те бренды, в которых есть вхождение этой строки(в любом месте). Регистр не важен

Пример ответа (/api/lite/pub/products/brands?searchString=кактус):

Пример запроса:

{
    "brands": [
        "Кактус Дейли",
        "Кактус ПРО"
    ]
}
Товары

/api/lite/pub/products/filters

Получение блоков фильтров

/api/lite/pub/products/filters

Возвращает для заданной коллекции перечень блоков и фильтров в них для поиска товаров.

Блоки бывают трех типов - Для атрибутов, для опций, и другие. Атрибуты и опции выделены в отдельные блоки ввиду потенциально большого количества справочников и значений в них.

Блоки возвращаются в режиме для покупателя  - загрузится список вручную сформированных блоков фильтров и выбранных значений фильтров, которые нужно отобразить покупателю.

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

Обязательный параметр запроса - ?collectionId=123

Фронтенд при выборе покупателем значений тех или иных фильтров должен составить поисковый GET запрос и передать его в метод GET /pub/products

в виде суммы параметров:

?filters=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке OTHER

?attributes=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке ATTRIBUTES

?features=field_name1:field_value1,field_value2;field_name2:field_value3-field_value4 для всех фильтров в блоке FEATURES

где field_name - это значение поля filters.fields.name, field_value - это значение поля filters.fields.stringValues для filters.fields.type: "string" или decimalValues для filters.fields.type: "decimal" или true/false для  filters.fields.type: "boolean".

Для для filters.fields.type: "decimal" так же можно передавать диапазон указывая начальное и конечное значение через дефис: field_name2:field_value3-field_value4

 

Поля возвращаемого значения:

Параметр Тип\формат Описание
filterBlocks array Массив блоков
id string Идентификатор блока
type enum Тип блока. ATTRIBUTES (только атрибуты товаров), FEATURES (только опции товаров), OTHER (остальные поля товаров)
mode enum

Режим работы блока. CUSTOMER (покупатель, отображены выбранные продавцом фильтры в блоке), CLIENT (продавец - отображены все возможные поля и блоки)

ordering integer Сортировка
collectionId string Идентификатор коллекции к которой относится данный блок фильтров
filters Массив Перечень фильтров в блоке
type enum Тип фильтра. PRICE, STOCK_AVAILABLE, SIZE, WEIGHT, COUNTRY_OF_ORIGIN, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND, IS_BESTSELLER
ordering integer Сортировка
fields Массив Поля фильтра
name string Наименование поля
nameReadable string Наименование поля, выводимое покупателю
type enum Тип поля. string, decimal, boolean 
ordering integer Сортировка
stringValues Массив Массив строковых значений поля
decimalValues Массив Массив числовых значений поля

 

Пример ответа:

{
    "success": true,
    "filterBlocks": [
        {
            "id": "1029",
            "type": "OTHER", // ATTRIBUTES, FEATURES
            "mode": "CUSTOMER", //CLIENT
            "ordering": 10,
            "collectionId": "123456"
            "filters":[
                {
                    "type":"PRICE",  // STOCK_AVAILABLE, SIZE, WEIGHT, PRICE, ATTRIBUTES, FEATURES, DISCOUNT_AVAILABLE, IS_NOVELTY, BRAND,      IS_BESTSELLER
                    "ordering": 10,
                    "fields":[
                        {
                            "name" : "field1",
                            "nameReadable": "Поле 1",
                            "type": "string", // decimal, boolean
                            "ordering": 10,
                            "stringValues": [
                                "value1", "value2"
                            ]
                        },
                        {
                            "name" : "field2",
                            "nameReadable": "Поле 2",
                            "type": "decimal",
                            "ordering": 11,
                            "decimalValues": [
                                15.2, 16.8
                            ]
                        },
                        {
                            "name" : "field3",
                            "nameReadable": "Поле 3",
                            "type": "boolean",
                            "ordering": 12                             
                        }
                    ]
                }
            ]
        }
    ]
}
Товары

/api/lite/products/templates/items

Получение шаблона импорта номенклатуры

/api/lite/products/templates/items

В ответ возвращается в бинарном виде с типом application/octet-stream xls файл для выгрузки в браузер пользователю

Можно задавать ему название "ItemTemplate.xls"

 

Успех:

application/octet-stream

 

Ошибка: 

status 500

{
"timestamp": "2020-04-03T10:38:46.343+0000",
"status": 500,
"error": "Internal Server Error",
"message": "12345",
"path": "/api/lite/settings/templates/items"
}

/api/lite/products/templates/items

Загружает на сервер xls файл (не xlsx) и производит анализ и формирование списка позиций для потенциального заказа.

Используется заголовок запроса Content-type: multipart/form-data.  (аналогично методу POST /api/lite/products/image)

В качестве параметр запроса передается:

 

Xls файл для анализа должен быть исправленным файлом метода:

/api/lite/products/templates/items

(удалены ненужные строки, проставлены значения в колонки Цена, Количество, НДС).

Возвращаемые данные клиентское приложение может использовать для формирования списка позиций заказа/заказа поставщика

На сервере никакой документ не изменяется при этом.

В ответ возвращается информация о распознанных товарах в списке items и перечень предупреждений по строкам xls файла, елис такие возникли.

Успешные позиции в items можно использовать для формирования заказа, предупреждения можно отображать для пользователя.

Успех

{
   
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Найдены следующие ошибки в строке 10 : не указано количество; - Артикул , Серые"
        },
        {
            "code": 0,
            "message": "Найдены следующие ошибки в строке 12 : не найден товар по полю Код в kak2c и значению 12345 - Артикул 456, Голубые"
        }
    ],
    "items": [
        {
            "num": 1,
            "variantId": "1021",
            "productId": "1021",
            "variantExtId":"EXT0029",
            "name": "Розовые",
            "article": "",
            "quantity": 2,
            "vatRate": "VAT_20",
            "price": 0,
          	"barcode": "600000000212"
        },
        {
            "num": 2,
            "variantId": "1024",
            "productId": "1024",
            "name": "Красные",
            "article": "",
            "quantity": 3,
            "vatRate": "VAT_20",
            "price": 0
        },
        {
            "num": 3,
            "variantId": "1025",
            "productId": "1025",
            "name": "Фиолетовые",
            "article": "",
            "quantity": 4,
            "vatRate": "VAT_20",
            "price": 0
        },
        {
            "num": 4,
            "variantId": "1023",
            "productId": "1023",
            "name": "Оранжевые",
            "article": "",
            "quantity": 5,
            "vatRate": "VAT_20",
            "price": 0
        },
        {
            "num": 5,
            "variantId": "1027",
            "productId": "1027",
            "name": "Белые",
            "article": "",
            "quantity": 6,
            "vatRate": "VAT_20",
            "price": 0
        },
        {
            "num": 6,
            "variantId": "1019",
            "productId": "1019",
            "name": "Флуоресцентно зеленые",
            "article": "",
            "quantity": 1,
            "vatRate": "VAT_20",
            "price": 0
        },
        {
            "num": 7,
            "variantId": "1018",
            "productId": "1018",
            "name": "Синие",
            "article": "",
            "quantity": 2,
            "vatRate": "VAT_20",
            "price": 0
        },
        {
            "num": 8,
            "variantId": "1017",
            "productId": "1017",
            "name": "Черные",
            "article": "",
            "quantity": 3,
            "vatRate": "VAT_20",
            "price": 0
        },
        {
            "num": 9,
            "variantId": "1022",
            "productId": "1022",
            "name": "Флуоресцентно желтые",
            "article": "",
            "quantity": 5,
            "vatRate": "VAT_20",
            "price": 0
        }
    ]
}

Ошибка

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Товары

/api/lite/products/additional_descriptions

Дополнительные описания – текстовые характеристики для описания номенклатуры. Используются для отображения дополнительной информации в карточке продукта. Не являются обязательными к заполнению.

Справочник заголовков описаний является общим для аккаунта и заполняется при добавлении описаний с новыми уникальными заголовками.

Запрос справочника заголовков

/api/lite/products/additional_descriptions/titles

Метод возвращает список всех когда-либо добавленных заголовков.

Поле Тип / формат Описание
title string Заголовок
pos double Число для сортировки

 

Пример результата запроса:

{
    "success": true,
    "titles": [
        {
            "title": "Применение",
            "pos": "1915616.000000000000000"
        },
        {
            "title": "Ингридиенты",
            "pos": "1915655.000000000000000"
        }
    ]
}

 

Товары

/api/lite/products/reviews

Получение отзывов

/api/lite/products/reviews

Возвращает отзывы на товары. Отзывы отсортированы по дате создания, начиная с новых.

Фильтрация

?productId=1030  - для фильтрации по идентификатору товара

?status=NEW - для фильтрации по статусу отзыва

 

Пейджинация

Для пейджинации используются параметры page и size: size - отзывов на странице, page - номер страницы.

Пример: /api/lite/products/reviews?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

Поле Тип / формат Описание
id string Идентификатор отзыва. 
product object Информация о товаре
   id string Идентификатор товара
   shortName string Название товара
   images array Изображения товара
      url string Ссылка на изображение
      id string Имя файла
      pos double Позиция
createTs datetime Время создания отзыва
customerName string

Имя автора отзыва

content string

Текст отзыва

score decimal

Оценка (от 1 до 5)

status enum

Статус отзыва

  • NEW
  • CONFIRMED
  • DELETED

Пример результата запроса:

{
    "success": true,
    "recordsTotal": 1,
    "reviews": [
        {
            "id": "e7951e18-8ee3-61b2-b616-018331a8fb06",
            "product": {
                "id": "1030",
                "shortName": "Масло для бороды Бунтарь - Дамаск",
                "images": [
                    {
                        "url": "https://storage.yandexcloud.net/images-k2c/aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
                        "id": "aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
                        "pos": "10000.000000000000000"
                    }
                ]
            },
            "createTs": "2020-08-07 19:35:36",
            "customerName": "Петя",
            "content": "текст отзыва",
            "score": 5,
            "status": "NEW"
        }
    ]
}

 

Редактирование отзывов

/api/lite/products/reviews

Редактирует отзыв.

Пример запроса

{
    "id": "6c62461f-fcf4-c388-c3b4-e09971590d6b",
	"customerName": "Петя",
	"content": "текст отзыва",
	"status": "CONFIRMED"
}

В ответ возвращается

Успех:

{
    "success": true,
    "review": {
        "id": "6c62461f-fcf4-c388-c3b4-e09971590d6b",
        "product": {
          	"id": "1030",
          	"shortName": "Масло для бороды Бунтарь - Дамаск",
          	"images": [
                {
                  "url": "https://storage.yandexcloud.net/images-k2c/aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
                  "id": "aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
                  "pos": "10000.000000000000000"
                }
          	]
        },
        "createTs": "2020-08-07 18:53:46",
        "customerName": "Петя",
        "content": "текст отзыва",
        "score": 5,
        "status": "CONFIRMED"
    }
}

Ошибка:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}
Товары

/api/lite/pub/products/reviews

Получение отзывов

/api/lite/pub/products/reviews

Возвращает подтвержденные отзывы на товары. Отзывы отсортированы по дате создания, начиная с новых.

?productId=1030  - обязательный параметр для фильтрации по идентификатору товара

 

Пейджинация

Для пейджинации используются параметры page и size: size - отзывов на странице, page - номер страницы.

Пример: /api/lite/pub/products/reviews?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

Поле Тип / формат Описание
id string Идентификатор отзыва. 
product object Информация о товаре
   id string Идентификатор товара
   shortName string Название товара
   images array Изображения товара
      url string Ссылка на изображение
      id string Имя файла
      pos double Позиция
createTs datetime Время создания отзыва
customerName string

Имя автора отзыва

content string

Текст отзыва

score decimal

Оценка (от 1 до 5)

status enum

Статус отзыва

  • CONFIRMED

Пример результата запроса:

{
    "success": true,
    "recordsTotal": 1,
    "reviews": [
        {
            "id": "e7951e18-8ee3-61b2-b616-018331a8fb06",
            "product": {
                "id": "1030",
                "shortName": "Масло для бороды Бунтарь - Дамаск",
                "images": [
                    {
                        "url": "https://storage.yandexcloud.net/images-k2c/aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
                        "id": "aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
                        "pos": "10000.000000000000000"
                    }
                ]
            },
            "createTs": "2020-08-07 19:35:36",
            "customerName": "Петя",
            "content": "текст отзыва",
            "score": 5,
            "status": "CONFIRMED"
        }
    ]
}

 

Создание отзывов

/api/lite/pub/products/reviews

Добавляет новый отзыв.

Пример запроса

{
    "productId": "1030",
	"customerName": "Петя",
	"content": "текст отзыва",
	"score": 5
}

В ответ возвращается

Успех:

{
    "success": true,
    "review": {
        "id": "6c62461f-fcf4-c388-c3b4-e09971590d6b",
        "product": {
            "id": "1030",
          	"shortName": "Масло для бороды Бунтарь - Дамаск",
          	"images": [
                {
                  "url": "https://storage.yandexcloud.net/images-k2c/aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
                  "id": "aff3c7f1-8b7c-47ea-a3a9-e9a52e476c12.jpg",
                  "pos": "10000.000000000000000"
                }
          ]
        },
        "createTs": "2020-08-07 18:53:46",
        "customerName": "Петя",
        "content": "текст отзыва",
        "score": 5,
        "status": "NEW"
    }
}

Ошибка:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}
Товары

/api/lite/products/features/appearance

По свойствам продуктов можно задавать дополнительно код цвета и url картинки

Запрос свойств отображения по продукту

/api/lite/products/features/appearance

Метод возвращает список кодов и url по используемым в данном продукте свойствам

обязательный параметр - id продукта

 

Пример результата запроса:

{
    "success": true,
    "appearanceFields": [
        {
            "feature": "color",
            "value": "Синие",
            "code": "#252525",
            "imageUrl": ""
        },
        {
            "feature": "color",
            "value": "Черные",
            "code": "#335522",
            "imageUrl": "https://i.mycdn.me/image?id=803347578459&plc=WEB&tkn=*JEEWXMlfdErrCiuXFgcM6G0WGxs&fn=sqr_288"
        }
    ]
}

 

Создание/обновление свойств отображения

/api/lite/products/features/appearance

Создает или обновляет свойства отображения (code, imageUrl) для указанного продукта + опции + значения опции.

 

Пример создания/обновления атрибута:

{
  "productId": "1003",
  "feature": "color",
  "value": "Черные",
  "code": "#335522",
  "imageUrl": "https://i.mycdn.me/image?id=803347578459&plc=WEB&tkn=*JEEWXMlfdErrCiuXFgcM6G0WGxs&fn=sqr_288"
}

 

 

 

Товары

/api/lite/pub/products/features/appearance

По свойствам продуктов можно запрашивать дополнительно код цвета и url картинки

Запрос свойств отображения по продукту

/api/lite/pub/products/features/appearance

Метод возвращает список кодов и url по используемым в данном продукте свойствам

обязательный параметр - id продукта

 

Пример результата запроса:

{
    "success": true,
    "appearanceFields": [
        {
            "feature": "color",
            "value": "Синие",
            "code": "#252525",
            "imageUrl": ""
        },
        {
            "feature": "color",
            "value": "Черные",
            "code": "#335522",
            "imageUrl": "https://i.mycdn.me/image?id=803347578459&plc=WEB&tkn=*JEEWXMlfdErrCiuXFgcM6G0WGxs&fn=sqr_288"
        }
    ]
}

 

Товары

/api/lite/products/export_ff

Выгрузка номенклатуры в Темполайн

/api/lite/products/export_ff

Создает/обновляет указанную номенклатуру в складской системе

 

Пример вызова:

{
    "warehouseCode": "2970c244-20f4-bab8-4c29-b04504281120",
    "products": ["1042"]
}

Пример успешного ответа

{
    "success": true
}

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}
Товары

/api/lite/products/accounting_attributes

Атрибуты учета – дополнительные характеристики для учета товара при отгрузке. Используются для проверки уникальных номеров товара. Не являются обязательными к заполнению.

Справочник атрибутов является общим для аккаунта.

Значения атрибутов задаются в информации о продуктах.

Запрос справочника атрибутов

/api/lite/products/accounting_attributes

Метод возвращает список всех доступных атрибутов.

Поле Тип / формат Описание
id string Идентификатор атрибута. 
code string Код атрибута - латиницей
title string Наименование атрибута
values array Справочник значений атрибута
    stringValue string Значение

 

Пример результата запроса:

{
    "success": true,
    "attributes": [
        {
            "id": "a629bb7c-331e-ef94-ebac-5955731bf142",
            "code": "chestnyznak",
            "title": "Честный знак",
            "values": [
                {
                    "stringValue": "1111"
                },
                {
                    "stringValue": "2222"
                }
            ]
        }
    ]
}

 

Создание/обновление атрибута

/api/lite/products/accounting_attributes

Создает или обновляет атрибут.

Code атрибута при создании/обновлении - обязательное поле, он задается явно для каждого атрибута.

 

Пример создания/обновления атрибута:

{
    "code": "chestnyznak",
    "title": "Честный знак",
    "values": [
        {
            "stringValue": "1111"
        },
        {
            "stringValue": "2222"
        }
    ]
}
Товары

/api/lite/products/stock_revise

Сверка остатков с Темполайн

/api/lite/products/stock_revise

Возвращает списки расхождений по товарам

Параметр warehouse_id - ид склада(необязательный). Если не указан, автоматически ищется склад с типом FULFILLMENT

/api/lite/products/stock_revise?warehouse_id=e147712f-172c-8c1c-12e6-0feb0e4968c7

Пример успешного ответа

{
    "success": true,
    "moreItems": [
        {
            "item": {
                "variantId": "demo1027",
                "productId": "demo1009",
                "name": "тест",
                "img": "https://storage.yandexcloud.net/images-k2c/bb514759-b917-45fb-8267-8541ec586451.jpg",
                "barcode": "6412600817669"
            },
            "available": 96,
            "reserved": 0,
            "external": 95,
            "diff": 1,
            "afterCorrection": 95,
            "reviseError": false
        },
        {
            "item": {
                "variantId": "demo1031",
                "productId": "demo1013",
                "name": "Футболка №2 (демо товар)",
                "img": "https://storage.yandexcloud.net/images-k2c/ce86c7c0-2b17-4d84-a914-c00d2d027b88.png",
                "barcode": ""
            },
            "available": 3,
            "reserved": 2,
            "external": 0,
            "diff": 3,
            "afterCorrection": 2,
            "reviseError": false
        }
    ],
    "lessItems": [
        {
            "item": {
                "variantId": "demo1032",
                "variantExtId": "ext12313123",
                "productId": "demo1014",
                "name": "Наушники",
                "article": "121234134",
                "img": "https://storage.yandexcloud.net/images-k2c/3d526d88-dcd8-48e6-8f45-9b09a19026ca.png",
                "barcode": "6412600817222"
            },
            "available": 44,
            "reserved": 32,
            "external": 46,
            "diff": 2,
            "afterCorrection": 46,
            "reviseError": false
        },
        {
            "item": {
                "variantId": "demo1000",
                "productId": "demo1000",
                "name": "Кактус Эуфобия Триангуларис",
                "barcode": ""
            },
            "available": 67,
            "reserved": 21,
            "external": 68,
            "diff": 1,
            "afterCorrection": 68,
            "reviseError": false
        }
    ]
}

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}
Товары

/api/lite/products/wb_categories

Запрос категорий товаров Wildberries

/api/lite/products/wb_categories

Получает список вариантов категорий товаров для Wildberries

Пример результата запроса:

{
    "success": true,
    "categories": [
        {
            "title": "Общая категория",
            "code": "COMMON",
            "wbCode": "1"
        },
        {
            "title": "Косметика, бытовая химия и питание",
            "code": "COSMETICS_AND_HOUSEHOLD_CHEMICALS",
            "wbCode": "2"
        },
        {
            "title": "Верхняя одежда и товары на вешалках",
            "code": "CLOTHES",
            "wbCode": "3"
        },
        {
            "title": "Обувь и товар в коробках",
            "code": "FOOTWEAR",
            "wbCode": "4"
        },
        {
            "title": "Книжная продукция и полиграфия",
            "code": "BOOKS",
            "wbCode": "5"
        },
        {
            "title": "Текстильные товары и аксессуары",
            "code": "TEXTILE_AND_ACCESSORIES",
            "wbCode": "6"
        },
        {
            "title": "Товары из кожи",
            "code": "LEATHER",
            "wbCode": "7"
        },
        {
            "title": "Посуда и кухонные принадлежности",
            "code": "DISHES",
            "wbCode": "8"
        },
        {
            "title": "Очки и оправы",
            "code": "GLASSES",
            "wbCode": "9"
        },
        {
            "title": "Товары для взрослых",
            "code": "PRODUCTS_FOR_ADULTS",
            "wbCode": "10"
        },
        {
            "title": "Грунт",
            "code": "SOIL",
            "wbCode": "11"
        },
        {
            "title": "Ювелирная продукция",
            "code": "JEWELRY",
            "wbCode": "12"
        },
        {
            "title": "Продукты питания и зоотовары",
            "code": "FOOD_AND_PET_SUPPLIES",
            "wbCode": "13"
        }
    ]
}
Товары

/api/lite/products/delete_barcodes_ff

Удаление ШК у номенклатуры в Темполайн

/api/lite/products/delete_barcodes_ff

Удаляет ШК у указанной номенклатуры в складской системе

Массив строк "barcodes" является приоритетным в поиске. Если он не пустой, поиск по id продукта не происходит

Пример вызова:

{
    "warehouseCode": "2970c244-20f4-bab8-4c29-b04504281120",
  	"barcodes": ["4607043102393"]
    "products": ["1042"]
}

Пример успешного ответа

{
    "success": true
}

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}
Товары

/api/lite/products/history

Запрос истории изменения товаров

/api/lite/products/history

Метод возвращает список изменений по товару.

параметры:

productId - идентификатор продукта

page - страница результатов (по умолчанию 0)

size - число записей на странице  (по умолчанию, 5)

jsonData - json товара, в формате /api/lite/products, если не передан, то jsonData не возвращается

id - идентификатор эвента(например, c9ae018d-2163-069c-b2fa-b46077652a73)

 

GET api/lite/products/history?productId=new0001

Пример результата запроса:

{
    "events": [
        {
            "changeSource": "USER",
            "description": "",
            "eventDate": "2022-02-15 15:34:33.444",
            "eventParameters": {
                "from": "POST /products"
            },
            "id": "c9ae018d-2163-069c-b2fa-b46077652a73",
            "level": "INFO",
            "success": true,
            "type": "SKU",
            "userLogin": "z@z.zz"
        },
        {
            "changeSource": "XLS",
            "description": "",
            "eventDate": "2022-02-15 15:32:58.070",
            "eventParameters": {
                "from": "XlsProductControllerService.sendProductMessages"
            },
            "id": "0c654d32-b1e3-d931-43ec-f92c01341806",
            "level": "INFO",
            "success": true,
            "type": "SKU",
            "userLogin": "z@z.zz"
        }
    ],
    "recordsTotal": 2,
    "success": true
}

 

GET api/lite/products/history?id=c9ae018d-2163-069c-b2fa-b46077652a73

Пример результата запроса:

{
    "events": [
        {
            "changeSource": "USER",
            "description": "",
            "eventDate": "2022-02-15 15:34:33.444",
            "eventParameters": {
                "from": "POST /products"
            },
            "id": "c9ae018d-2163-069c-b2fa-b46077652a73",
            "jsonData": "{\"anyPublicCollections\":false,\"available\":true,\"brandName\":\"Levi's\",\"collections\":[\"1001\"],\"deleted\":false,\"description\":\"922\",\"expirationMode\":\"NO_EXPIRATION\",\"id\":\"new0001\",\"internationalDescription\":\"0\",\"isBestseller\":false,\"isNovelty\":false,\"shortName\":\"Джинсы (демо товар)1\",\"type\":\"SKU\",\"useBatchAccounting\":false,\"variants\":[{\"id\":\"100002\",\"isFfPhysicalSetSynchronized\":false,\"isFfSynchronised\":true,\"isPhysicalSet\":false,\"ordering\":\"1971940.000000000000000\",\"stock\":[{\"stockAvailable\":0,\"stockDefective\":0,\"stockDefectiveReserved\":0,\"stockReserved\":0,\"stockTotal\":0,\"warehouseCode\":\"27f650d9-7378-33c1-bae1-6aea66140bbd\"},{\"stockAvailable\":0,\"stockDefective\":0,\"stockDefectiveReserved\":0,\"stockReserved\":0,\"stockTotal\":0,\"warehouseCode\":\"374f35a6-633f-bc9d-917a-ce37cb74bd49\"}],\"type\":\"SKU\",\"vat\":\"NO_VAT\"}],\"vat\":\"NO_VAT\"}",
            "level": "INFO",
            "success": true,
            "type": "SKU",
            "userLogin": "z@z.zz"
        }
    ],
    "recordsTotal": 1,
    "success": true
}

 

Товары

/api/lite/products/history/diff

Запрос разницы между двумя состояниями истории товара

/api/lite/products/history/diff

Метод возвращает список человекочитаемых изменений товара.

leftId и rightId - идентификаторы записей истории изменений товара, полученных в методе /api/lite/products/history

Пример запроса:

{
    "items":[
        {
        "leftId":"8df52d29-7f75-c272-6894-d2c00e653c8c",
        "rightId":"a5c42f70-c634-21cf-b25e-f2e585db221e"
        },
        {
        "leftId":"63120d8b-b0b5-145e-ff44-d1bea50a77e7",
        "rightId":"8df52d29-7f75-c272-6894-d2c00e653c8c"
        }
    ]
}

Пример результата запроса:

{
    "items": [
        {
            "diff": "Цена: \"21000.00\" -> \"20000.00\", Розничная цена: \"21000.00\" -> \"20000.00\", Габариты: \"Ш:101 В:60 Г:30\" -> \"Ш:100 В:60 Г:30\"",
            "leftId": "8df52d29-7f75-c272-6894-d2c00e653c8c",
            "rightId": "a5c42f70-c634-21cf-b25e-f2e585db221e"
        },
        {
            "diff": "Название: \"Компьютер (демо товар)2\" -> \"Компьютер (демо товар)1\"",
            "leftId": "63120d8b-b0b5-145e-ff44-d1bea50a77e7",
            "rightId": "8df52d29-7f75-c272-6894-d2c00e653c8c"
        }
    ],
    "success": true
}

 

 

Товары

/api/lite/products/batch

Создание/обновление нескольких продуктов (POST /api/lite/products/batch)

/api/lite/products/batch

Создает или обновляет продукты, переданные списком. Ограничение - 1000 продуктов.

Структура продуктов в списке аналогична методу POST /api/lite/products 

 

Пример вызова:

Пример запроса
{
   "products":[
      {
         "id":"BATCH2500",
         "shortName":"BATCH2500",
         "variantsToUpdate":[
            {
               "variantId":"BATCH2500",
               "productId":"BATCH2500",
               "barcodes":[
                  {
                     "value":"bc9194352",
                     "isDefault":true
                  }
               ]
            }
         ]
      },
      {
         "id":"BATCH2501",
         "shortName":"BATCH2501",
         "variantsToUpdate":[
            {
               "variantId":"BATCH2501",
               "productId":"BATCH2501",
               "barcodes":[
                  {
                     "value":"bc7216735",
                     "isDefault":true
                  }
               ]
            }
         ]
      },
      {
         "id":"BATCH2502",
         "shortName":"BATCH2502",
         "variantsToUpdate":[
            {
               "variantId":"BATCH2502",
               "productId":"BATCH2502",
               "barcodes":[
                  {
                     "value":"bc6271942",
                     "isDefault":true
                  }
               ]
            }
         ]
      }
   ]
}

Пример положительного ответа:

Пример ответа
{
    "finishTime": "2022-03-29 19:14:47",
    "products": [
        {
            "id": "BATCH2500",
            "product": {
                "available": true,
                "collections": [
                    "1001"
                ],
                "deleted": false,
                "id": "BATCH2500",
                "shortName": "BATCH2500",
                "type": "SKU",
                "useBatchAccounting": false,
                "variants": [
                    {
                        "barcodes": [
                            {
                                "isDefault": true,
                                "type": "COMMON",
                                "value": "bc9900111"
                            }
                        ],
                        "id": "BATCH2500",
                        "isFfPhysicalSetSynchronized": false,
                        "isFfSynchronised": true,
                        "isPhysicalSet": false,
                        "ordering": "1976406.000000000000000",
                        "stock": [
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
                            },
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
                            }
                        ],
                        "type": "SKU",
                        "vat": "NO_VAT"
                    }
                ],
                "vat": "NO_VAT"
            },
            "success": true,
            "variantsResult": [
                {
                    "productId": "BATCH2500",
                    "success": true,
                    "variantId": "BATCH2500"
                }
            ]
        },
        {
            "id": "BATCH2501",
            "product": {
                "available": true,
                "collections": [
                    "1001"
                ],
                "deleted": false,
                "id": "BATCH2501",
                "shortName": "BATCH2501",
                "type": "SKU",
                "useBatchAccounting": false,
                "variants": [
                    {
                        "barcodes": [
                            {
                                "isDefault": true,
                                "type": "COMMON",
                                "value": "bc5524020"
                            }
                        ],
                        "id": "BATCH2501",
                        "isFfPhysicalSetSynchronized": false,
                        "isFfSynchronised": true,
                        "isPhysicalSet": false,
                        "ordering": "1976406.000000000000000",
                        "stock": [
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
                            },
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
                            }
                        ],
                        "type": "SKU",
                        "vat": "NO_VAT"
                    }
                ],
                "vat": "NO_VAT"
            },
            "success": true,
            "variantsResult": [
                {
                    "productId": "BATCH2501",
                    "success": true,
                    "variantId": "BATCH2501"
                }
            ]
        },
        {
            "id": "BATCH2502",
            "product": {
                "available": true,
                "collections": [
                    "1001"
                ],
                "deleted": false,
                "id": "BATCH2502",
                "shortName": "BATCH2502",
                "type": "SKU",
                "useBatchAccounting": false,
                "variants": [
                    {
                        "barcodes": [
                            {
                                "isDefault": true,
                                "type": "COMMON",
                                "value": "bc6869740"
                            }
                        ],
                        "id": "BATCH2502",
                        "isFfPhysicalSetSynchronized": false,
                        "isFfSynchronised": true,
                        "isPhysicalSet": false,
                        "ordering": "1976406.000000000000000",
                        "stock": [
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
                            },
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
                            }
                        ],
                        "type": "SKU",
                        "vat": "NO_VAT"
                    }
                ],
                "vat": "NO_VAT"
            },
            "success": true,
            "variantsResult": [
                {
                    "productId": "BATCH2502",
                    "success": true,
                    "variantId": "BATCH2502"
                }
            ]
        }
    ],
    "startTime": "2022-03-29 19:14:47",
    "success": true
}

Пример положительного ответа с ошибкой сохранения:

Пример ответа
{
    "finishTime": "2022-03-29 19:22:30",
    "products": [
        {
            "errors": [
                {
                    "code": 0,
                    "message": "Заданный ID продукта \"№BATCH2500\" не соответствует требованиям: ID должен содержать только цифры, латиницу, тире, подчеркивание, #, или точку "
                }
            ],
            "success": false
        },
        {
            "id": "BATCH2501",
            "product": {
                "available": true,
                "collections": [
                    "1001"
                ],
                "deleted": false,
                "id": "BATCH2501",
                "shortName": "BATCH2501",
                "type": "SKU",
                "useBatchAccounting": false,
                "variants": [
                    {
                        "barcodes": [
                            {
                                "isDefault": true,
                                "type": "COMMON",
                                "value": "bc7216735"
                            }
                        ],
                        "id": "BATCH2501",
                        "isFfPhysicalSetSynchronized": false,
                        "isFfSynchronised": true,
                        "isPhysicalSet": false,
                        "ordering": "1976406.000000000000000",
                        "stock": [
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
                            },
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
                            }
                        ],
                        "type": "SKU",
                        "vat": "NO_VAT"
                    }
                ],
                "vat": "NO_VAT"
            },
            "success": true,
            "variantsResult": [
                {
                    "productId": "BATCH2501",
                    "success": true,
                    "variantId": "BATCH2501"
                }
            ]
        },
        {
            "id": "BATCH2502",
            "product": {
                "available": true,
                "collections": [
                    "1001"
                ],
                "deleted": false,
                "id": "BATCH2502",
                "shortName": "BATCH2502",
                "type": "SKU",
                "useBatchAccounting": false,
                "variants": [
                    {
                        "barcodes": [
                            {
                                "isDefault": true,
                                "type": "COMMON",
                                "value": "bc6271942"
                            }
                        ],
                        "id": "BATCH2502",
                        "isFfPhysicalSetSynchronized": false,
                        "isFfSynchronised": true,
                        "isPhysicalSet": false,
                        "ordering": "1976406.000000000000000",
                        "stock": [
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "5cb8dd66-836d-6c1a-a84b-e71fcf97104c"
                            },
                            {
                                "stockAvailable": 0,
                                "stockDefective": 0,
                                "stockDefectiveReserved": 0,
                                "stockReserved": 0,
                                "stockTotal": 0,
                                "warehouseCode": "e55cd8ab-09f3-26b7-00df-27e3642f5b79"
                            }
                        ],
                        "type": "SKU",
                        "vat": "NO_VAT"
                    }
                ],
                "vat": "NO_VAT"
            },
            "success": true,
            "variantsResult": [
                {
                    "errors": [
                        {
                            "code": 0,
                            "message": "Штрихкод bc7216735 уже используются в варианте [BATCH2501] BATCH2501, ШК: bc7216735 "
                        }
                    ],
                    "productId": "BATCH2502",
                    "success": false,
                    "variantId": "BATCH2502"
                }
            ]
        }
    ],
    "startTime": "2022-03-29 19:22:30",
    "success": true
}

 

Обновление отдельных полей нескольких продуктов (PATCH /api/lite/products/batch)

/api/lite/products/batch

Обновляет одно или несколько полей продукта, значения отсутствующих в запросе полей при этом не изменяются.

Тело запроса аналогично POST /api/lite/products/batch

id - необходимо указывать обязательно

Пример вызова:

Пример запроса
{
	"products":[
		{
			"id":"1015",
			"shortName":"Limited Edition Паста (помада) для укладки волос",
			"internationalDescription":"abc"
		},
      	{
			"id":"1016",
			"shortName":"Товар 2"
		}
	]
}

ответ аналогичен POST /api/lite/products/batch

 

 

 

Товары

/api/lite/products/batch/accounting/stocks

Запрос остатков по партиям товаров (GET/api/lite/products/batch/accounting/stocks)

/api/lite/products/batch/accounting/stocks

Запрос остатков по товарам, для которых ведется учет по партиям.

 

Пример вызова:

GET/api/lite/products/batch/accounting/stocks?warehouseCode=12345&variantId=1234&format=json

warehouseCode - Код склада, обязательный

variantId - список id вариантов товаров, через запятую, опциональный

format - формат данных - json или xls, опциональный. В случае xls в ответе будет ссылка на файл

Пример положительного ответа:

Пример ответа
{
    "items": [
        {
            "batchAccountingStocks": [
                {
                    "available": 50,
                    "batchAccountingNumber": "2478 01.01.2033 0:00:00",
                    "expirationDays": 0,
                    "expirationDaysLimit": 0,
                  	"productionDate": "2022-11-01",
                  	"expirationDate": "2022-12-01",
                    "manufacturer": "",
                    "manufacturerRequisites": "",
                    "useBatchAccounting": true,
                    "useExpiration": true
                },
                {
                    "available": 8,
                    "batchAccountingNumber": "2478 09.01.2021 0:00:00",
                    "expirationDays": 0,
                    "expirationDaysLimit": 0,
                    "productionDate": "2022-11-01",
                  	"expirationDate": "2022-12-01",
                    "manufacturer": "",
                    "manufacturerRequisites": "",
                    "useBatchAccounting": true,
                    "useExpiration": true
                },
                {
                    "available": 52,
                    "batchAccountingNumber": "2478 09.08.2025 0:00:00",
                    "expirationDays": 0,
                    "expirationDaysLimit": 0,
                  	"productionDate": "2022-11-01",
                  	"expirationDate": "2022-12-01",
                    "manufacturer": "",
                    "manufacturerRequisites": "",
                    "useBatchAccounting": true,
                    "useExpiration": true
                }
            ],
            "variantId": "2478"
        }
    ],
    "success": true
}
Пример ответа для format = xls
{
    "file": "https://link_to_file.xls",
    "success": true
}

 

Товары

/api/lite/products/variants/batch

Обновление отдельных полей нескольких вариантов(PATCH /api/lite/products/variants/batch)

/api/lite/products/variants/batch

Обновляет одно или несколько полей варианта, значения отсутствующих в запросе полей при этом не изменяются.

productId и variantId - необходимо указывать обязательно

Пример вызова:

Пример запроса
{
	"variantsToUpdate":[
		{
			"weight":200000,
			"productId":"demo1012",
			"variantId":"demo1030",
			"extId":"11011"
		},
		{
			"weight":233,
			"productId":"demo1013",
			"variantId":"demo1031",
			"extId":"11012"
		}
	]
}

 

Товары

API загрузки уникальных номеров номенклатуры в Кактус

Загрузка уникальных номеров через json файл

/api/lite/products/load/unique_number/json

Пример вызова:

{
  "items" : [
    
	{ 
      "variantId" : "1000",//variant_id номенклатуры
	  "uniqueNumbers" : [
        {
	     "uniqueNumber" : "1232344456777",//уникальный номер
		 "type" : "UIT"// пока только UIT
        }
	  ]
	}
  ]
}

Пример успешного ответа

{
    "success": true
}

Загрузка уникальных номеров через excel файл

/api/lite/products/load/unique_number/excel

Эксель файл должен быть в формате xls, в первой колонке varian_id номенклатуры, вторая колонка уникальный номер, третья тип уникального номера. Например 1000, njkjnw9i98, UIT.

upFile - файл excel в formData.

Файл эксель:imei.png

Пример успешного ответа

{
    "success": true
}

Получить список загруженных уникальных номеров номенклатуры

/api/lite/products/unique_numbers/list?variantId=1000&isUsed=false&page=0&size=10

 

variantId - ид варианта номенклатуры

isUsed - использованный/не использованные уникальные номенклатуры

page и size - для пагинации

Пример успешного ответа

{
    "success": true,
    "uniqueNumbers": [
        {
            "disabled": false,
            "isReserved": false,
            "physicalSet": "",
            "purchaseOrder": "",
            "uniqueNumber": "0104064211748539215%HefMSHYlegL9100BE92IlF/M3RjtFd4KI5xnWnri5ZHCNIlndYdSVKLoG2VvWg3BZ3dPM1EnijDoPSuNJmVI63clfwHgXLVy3vDCXKvnw==",
            "type": "UIT"
        },
        {
            "disabled": false,
            "isReserved": false,
            "physicalSet": "",
            "purchaseOrder": "",
            "uniqueNumber": "0104064211296115217>dGPovOMpiDH␝918093␝92gbLYtaYLYnFIUsQilCOiicPOKJZMiuKKUeAIvO3R9wgWoEip5FjubkxPpXsOuCr9N4nMGXuD6VgS8oK/jkfvJw==␝",
            "type": "UIT"
        }
    ]
}

Получить уникальный номер для номенклатуры, поставке или комплектации

/api/lite/products/unique_number

Данный метод возвращает уникальный номер, и ставит галку что данный уникальный номер зарезервирован.

variant_id - ид варианта номенклатуры

type_unique_number - тип уникального номера

id(необязательный) - номер документа(поставки, комплектации)

doc_type - тип документа (PURCHASE_ORDER, PHYSICAL_SET_ORDER)

 

Пример успешного ответа

{
    "success" : true,
    "variantId" : "1000",
    "uniqueNumber" : "mlkmkjnjkmkjnjk"
}

Проставить флаг использования уникальному номеру

/api/lite/products/unique_number/used

Пример вызова:

{ 
  "variantId" : "1000",	
  "uniqueNumber" : "njkdhbjcs"
}

 

Данный метод ставит флаг что данный уникальный номер использован.

Пример успешного ответа

{
    "success": true
}

 

Товары

/api/lite/products/variants/eshop_settings

Изменение внешних кодов для интеграций (POST /api/lite/products/variants/eshop_settings)

/api/lite/products/variants/eshop_settings

Обновляет настройки для вариантов. Ограничение - 1000 вариантов.

Пример вызова:

Пример запроса
{
    "variants": [
        {
            "variantId": "1000",
            "eshopSettings": [
                {
                    "enabled": true,
                    "eshopId": "44fce711-e809-59ed-895a-661a32886d7f",
                    "extId": "HTW-LX3",
                    "zeroStock": true
                },
                {
                    "enabled": true,
                    "eshopId": "4f4509b3-3b5b-1474-cabd-dfe8fce1b9ca",
                    "extId": "HTW-LX3"
                }
            ]
        }
    ]
}

Пример положительного ответа:

Пример ответа
{
    "success": true,
    "variants": [
        {
            "success": true,
            "variantId": "1000"
        }
    ]
}

Пример положительного ответа с ошибкой сохранения:

Пример ответ
{
    "success": true,
    "variants": [
        {
            "success": false,
          	"errors": [
              {
                "code": 0,
                "message": "Не найдена интеграция с указанным ID"
              }
            ],
            "variantId": "1000"
        }
    ]
}

 

 

Товары

/api/lite/products/warehouse/categories

Категории товаров (продуктов) хранятся в таблице oms_domain_sku_category. Кактус еженочно синхронизируется с WMS, получая оттуда актуальные категории.

 

Запрос справочника атрибутов

/api/lite/products/warehouse/categories

Метод возвращает список категорий товаров.

Поле Тип / формат Описание
format string Формат ответа (json/xls) 

 

Пример результата запроса:

{
    "items": [
        {
            "code": "weak",
            "title": "Хрупкое"
        },
        {
            "code": "strong",
            "title": "Сильное"
        },
        {
            "code": "bubble",
            "title": "Булькающее"
        }
    ],
    "success": true
}
Товары

/api/lite/products/stocks

Метод возвращает остатки товарных предложений (с возможностью фильтрации по дате изменения остатков).

 

Запрос остатков

/api/lite/products/stocks

Параметры запроса:

stock_updated_from - дата, с момента которой изменились остатки, формат yyyy-MM-dd'T'HH:mm:ss[.SSS]

Пример: /api/lite/products/stocks?stock_updated_from=2024-05-21T00:00:00.000

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/products/stocks?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=1000

Максимальное количество записей на одной странице - 100 000. Даже если указано значение более 100 000

Пример результата запроса:

"id": "215606" - ИД варианта

stockTotal - полный остаток
stockReserved - резерв
stockAvailable - свободный остаток (stockAvailable = stockTotal - stockReserved)
stockDefective - полный остаток на складе брака
stockDefectiveReserved - резерв на складе брака
stockExpired - полный остаток на складе просрочки
{
    "recordsTotal": 2873,
    "success": true,
    "variants": [
        {
            "id": "215606",
            "stock": [
                {
                    "stockAvailable": 8,
                    "stockDefective": 0,
                    "stockDefectiveReserved": 0,
                    "stockExpired": 0,
                    "stockReserved": 2,
                    "stockTotal": 10,
                    "warehouseCode": "d7a490e3-7dd6-0104-60b6-ca222b03bf18"
                }
            ]
        },
        {
            "id": "213485",
            "stock": [
                {
                    "stockAvailable": 25,
                    "stockDefective": 0,
                    "stockDefectiveReserved": 0,
                    "stockExpired": 0,
                    "stockReserved": 1,
                    "stockTotal": 26,
                    "warehouseCode": "d7a490e3-7dd6-0104-60b6-ca222b03bf18"
                }
            ]
        },
        {
            "id": "206949",
            "stock": [
                {
                    "stockAvailable": 14,
                    "stockDefective": 0,
                    "stockDefectiveReserved": 0,
                    "stockExpired": 0,
                    "stockReserved": 1,
                    "stockTotal": 15,
                    "warehouseCode": "d7a490e3-7dd6-0104-60b6-ca222b03bf18"
                }
            ]
        }
    ]
}

Коллекции

Коллекции

/api/lite/collections

Получение списка коллекций

/api/lite/collections

Возвращает список всех коллекций.

Товары группируются по коллекциям для отображения в каталоге товаров в интернет-магазине.

 

Фильтры:

/api/lite/collections?id=1000 – возвращает информацию только по выбранной коллекции с указанным id

Поля возвращаемого значения

Параметр Тип\формат Описание
collections array Массив коллекций
id string Идентификатор коллекции
title string Заголовок коллекции
description string Описание коллекции (html)
surl string Семантическое наименование ссылки (friendly URL) на коллекцию
parentId string Идентификатор родительской коллекции
type string Тип коллекции (CATALOG/PRODUCT)

isAllProducts

boolean Является коллекцией Все продукты
fillType enum "MANUAL", "AUTO". Тип заполнения коллекции продуктами
defaultImage string Ссылка на изображение коллекции
productCount integer Количество продуктов (не удаленных) в коллекции (readonly)
includedInCatalog boolean Входит в активный каталог-меню сайта  (readonly)
breadcrumbs array Хлебные крошки с путем от корневой коллекции до заданной (только при фильтре по id)
products array Массив продуктов, входящих в коллекцию 
filters array Массив фильтров коллекции

 

Пример ответа:

{
    "success": true,
    "collections": [
        {
            "id": "1029",
            "title": "Зерновой кофе",
            "description": "<P>Лучший <B>зерновой</B> кофе</P>",
            "surl": "zernovoy_coffee",
            "parentId": "123",
            "type": "PRODUCT",
            "defaultImage":"http://address.ru/123.jpg",
            "breadcrumbs":[
                {"id": "1", "title": "Все товары", "level":0},
                {"id": "1023", "title": "Кофе", "level":1},
                {"id": "1029", "title": "Зерновой кофе", "level":2}
            ],
            "products": [
              {
                "id": "1000",
                "extId": null,
                "shortName": "Кактус Эуфобия Триангуларис",
                "description": null,
                "available": null,
                "deleted": null,
                "brandName": null,
                "countryOfOrigin": null,
                "tnvedCode": null,
                "internationalDescription": null,
                "isBestseller": null,
                "isNovelty": null,
                "type": null,
                "vat": null,
                "options": null,
                "images": null,
                "variants": null,
                "collections": null,
                "attributes": null,
                "collectionPos": "100.000000000000000"
              }
            ]
            "fillType":"AUTO", 
            "isAllProducts": false,    
            "productCount": 15,
            "includedInCatalog": true,
            "logicMode":"AND",
            "filters":[
                {"num":1, "filterType":"BRAND_NAME", "compareOperation":"CONTAINS", "compareValue":"Samsung"}
            ]
        }
    ]
}

 

Создание/обновление коллекции

/api/lite/collections

Создает или обновляет коллекцию.

Если id указан - проводится обновление коллекции с указанным id, если не указан - создается новая коллекция.

 

Пример обновления коллекции:

{
"id":"1029",
"title": "Зерновой кофе",
"description": "<P>Лучший <B>зерновой</B> кофе</P>",
"surl": "zernovoy_coffee",
"parentId" : "123",
"defaultImage":"http://address.ru/123.jpg",
"type": "PRODUCT",
"fillType":"MANUAL",
"products": [
{
"id": "1000",
"extId": null,
"shortName": "Кактус Эуфобия Триангуларис",
"description": null,
"available": null,
"deleted": null,
"brandName": null,
"countryOfOrigin": null,
"tnvedCode": null,
"internationalDescription": null,
"isBestseller": null,
"isNovelty": null,
"type": null,
"vat": null,
"options": null,
"images": null,
"variants": null,
"collections": null,
"attributes": null,
"collectionPos": "100.000000000000000"
}
]
"logicMode":"AND",
"filters":[
{"num":1, "filterType":"BRAND_NAME", "compareOperation":"CONTAINS", "compareValue":"Samsung"}
]
}

Удаление коллекции

/api/lite/collections

Для удаления коллекции, выполняется следующий DELETE запрос с указанием идентификатора коллекции в параметре id.

В ответ возвращается результат операции и id удаленной коллекции.

Продукты, входившие в удаляемую коллекцию - более не будут входить в нее.

Дочерние коллекции у удаляемой - тоже удаляются, как и привязки их к товарам.


Пример успешного ответа

{
  "success": true,
  "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}

 

В случае ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Картинки с указанным id не существует"
    }
  ]
}
Коллекции

/api/lite/collections/image

Создание картинки к коллекции

/api/lite/collections/image

Загружает на сервер картинку и привязывает изображение к коллекции.

Используется заголовок запроса Content-type: multipart/form-data.

В качестве параметров запроса передается:

На стороне сервера:

В ответ возвращается информация о загруженной картинке:

 

Успех:

{
    "success": true,
    "url": "https://img.kak2c.ru/i/H/E/Y8x2a2Zj.jpg",
    "id": "42737a4a-8f76-4aa6-a3d1-ae553f2409cb",
    "pos": "10000.000000000000000"
}

Параметры:

  • url- прямая ссылка на оригинал картинки
  • id - идентификатор картинки (для последующего обновления или удаления)
  • pos - автоматически присвоенное значение для сортировки

 

Ошибка:

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

Удаление картинки к коллекции

/api/lite/collections/image

Успех:

{
    "success": true,   
    "id": "1234" - id коллекции    
}

 

Ошибка:

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

 

Коллекции

/api/lite/pub/collections

Получение списка коллекций

/api/lite/pub/collections

(метод требует авторизации по домену)

Возвращает список всех коллекций.

Товары группируются по коллекциям для отображения в каталоге товаров в интернет-магазине.

 

Фильтры:

Поля возвращаемого значения

Параметр Тип\формат Описание
collections array Массив коллекций
id string Идентификатор коллекции
title string Заголовок коллекции
description string Описание коллекции (html)
surl string Семантическое наименование ссылки (friendly URL) на коллекцию
parentId string Идентификатор родительской коллекции
type string Тип коллекции (CATALOG/PRODUCT)
breadcrumbs array Хлебные крошки с путем от корневой коллекции до заданной (только при фильтре по id)

 

Пример ответа:

{
    "success": true,
    "collections": [
        {
            "id": "1029",
            "title": "Зерновой кофе",
            "description": "<P>Лучший <B>зерновой</B> кофе</P>",
            "surl": "zernovoy_coffee",
            "parentId": "123",
            "type": "PRODUCT",
            "defaultImage":"http://address.ru/123.jpg",
            "breadcrumbs":[
                {"id": "1", "title": "Все товары", "level":0},
                {"id": "1023", "title": "Кофе", "level":1},
                {"id": "1029", "title": "Зерновой кофе", "level":2}
            ]
        }
    ]
}

Заказы

Заказы

Комментарии по выгрузке заказов в Кактус

Для передачи заказов в Кактус, используется метод:

 

POST /api/lite/orders

Важно передать корректный адрес (вместе с ФИАС кодами), корректный телефон, правильный код способа доставки (и если выбран ПВЗ, то номер ПВЗ).

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

Поэтому изменение заказа в Кактус может занимать относительно продолжительное время (10-15 секунд), пока вся синхронизация и проверки будут пройдены.

Изменение заказа возможно до момента взятия в работу (до статуса начала сборки заказа). Отмена заказа возможна до момента упаковки.

Для мониторинга состояния заказов, метод:

 

GET /api/lite/orders

Правильнее всего, получать только заказы, которые изменились с последней отметки времени. Это максимально экономит трафик.

Запрос заказов с фильтрацией по метке времени: updated_from

Заказы

/api/lite/orders

Внимание! Не путать с методами /api/lite/order - это старые методы, которые будут удалены.

Запрос списка заказов

/api/lite/orders

Метод возвращает список заказов с заданной фильтрацией.

Можно использовать как для получения списка, так и единичного заказа.

Полный комплект данных по заказам будет передан только если в запросе будет параметр full_info=true

{   
    "success": true,
    "recordsTotal": 1,
    "orders": [
        {
            "id": "4249-756",
         	"externalId": "extId",
            "externalId2": "extId2",
            "externalId3": "extId3",
            "externalId4": "extId4",
            "externalId5": "extId5",
            "date": "2020-02-24 00:06:09",
          	"needReserve": true,
            "createTs": "2020-02-24 06:06:14.078",
            "updateTs": "2020-02-25 06:06:14.078",
            "status": "ORDER_INFO_COURIER",
            "totalOrderSum": 2687,
            "insuranceSum": 2687,
            "insuranceSumAutoCalculation":true,
            "paymentStatus": "NOT_PAID",
            "paymentMethodCode": "online",
            "paymentMethodType": "ONLINE",
            "paymentMethodName": "Предоплата картой на сайте",
          	"customerPaymentExternalId": "26a11eef-000f-5000-8000-195192d6e83d",
            "needCustomerPayment": false,
            "confirmStatus": "APPROVED",
            "comment": "",
            "promocode": "hibro",
            "promocodeAppliedDiscount": 424,
            "shortUrl": "http://r.kak2c.ru/yeq2h4r",
            "tags": [],
            "isMarketplaceOrder": false,
          	"plannedTakeOutDate": "2020-02-26 13:00:00",
			"readyForFFExport": true,
            "delivery": {
                "code": "3321cd66-6605-aba4-d4d3-e14d1257562f",
                "deliveryCode": "29019c97-02b2-387c-fa85-875bd13e8b11",
                "type": "COURIER",
                "title": "DPD",
                "pickupPointId": "",
                "logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_dpd_left.svg",
                "trackingNumber": null,
                "trackingURL": null,
                "desiredDeliveryDate": null,
                "deliverySumBelowLimitAmount": 1000.00,
                "deliverySumLimitAmount": 5000.00,
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "18:00",
                "isDeliverySumLimitActive": true,
                "deliveryComment": "",
                "pvzComment": "",
              	"actualDeliveryDate": "2020-11-19 17:07",
              	"courierPlanDeliveryDate": "2020-11-19 00:00",
                "courierPlanDeliveryDateChangeReason": "Недозвон до покупателя",
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": "Сосенское",
                    "city": "Москва",
                    "settlement": null,
                    "street": "ул Александры Монаховой",
                    "house": "94",
                    "block": "5",
                    "building": "",
                    "flat": "21",
                    "fullAddress": "108801, г Москва, поселение Сосенское, Новомосковский округ, ул Александры Монаховой, д 94 к 5, кв 21",
                    "fullCity": null,
                    "rawData": "Москва, ул Александры Монаховой, д 94, корп.5, кв 21.",
                    "zip": "108801",
                    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "areaFias": "90648b5c-d6e7-4bb0-9782-7908808325cf",
                    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "settlementFias": null
                },
                "receiver": {
                    "name": "Диана",
                    "surname": "Шалиева",
                    "patronymic": "Аликовна",
                    "phone": "89050250111",
                    "rawPhone": "89050250111",
                    "alternativePhone": "",
                    "email": "morisen777@yandex.ru",
                    "post": null,
                    "personType": null
                },              
              	"pvzInfo": {
                    "address": {
                        "country": "Россия",
                        "countryCode": "RU",
                        "region": "Москва",
                        "area": null,
                        "city": "Москва",
                        "settlement": null,
                        "street": null,
                        "house": null,
                        "block": null,
                        "building": null,
                        "flat": null,
                        "fullAddress": "Таганская ул., д. 1, стр. 1",
                        "fullCity": null,
                        "rawData": null,
                        "zip": "109147",
                        "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "areaFias": null,
                        "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "settlementFias": null
                    },
                    "metroStation": "метро Таганская, Марксистская",
                    "latitude": "55.741772",
                    "longitude": "37.655975",
                    "code": "7702-015",
                    "courier": "PickPoint",
                    "courierCode": "PICKPOINT",
                    "description": "Пункт выдачи заказов находится в ТЦ Звездочка, в фотосалоне Мультифото. Пешком: м. Марксистская, последний вагон из центра, выход в сторону ул. Таганской. Транспортом: автобус № 106, 74в, 74, 51, 567; троллейбус № 26, 63, м7, м7к, 27 до ост. м. Марксистск",
                    "maxSize": "90",
                    "maxWeight": 15,
                    "workTime": "Пн-Вс 10:00-22:00",
                    "postOfficeNumber": null,
                    "paymentMethods": [
                        "COD_CASH",
                        "COD_CARD"
                    ],
                    "type": "PVZ",
                    "courierPostamatType": "ПВЗ"
                },
                "deliveryServices": [
                    "CHECK_CONTENT"
                ],
              "isDeliverySumLimitActive": true,
              "deliverySumLimitAmount": 324234,
              "deliverySumBelowLimitAmount": 23432432
            },
            "excludeFromSummary": true,
            "legalEntity": {
                "id": "3c0a3ad3-b10f-4299-5b1b-a3d90b0c198a",
                "type": "PERSON",
                "name": " Розничный покупатель"
            },
            "items": [
                {
                    "num": 1,
                    "productId": "1001",
                    "productExtId": null,
                    "variantId": "1001",
                    "variantExtId": null,   
                    "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                    "article": "BR00T-000140-2",
                    "quantity": 1,
                    "vatRate": "NO_VAT",
                  	"vatSkuProduct": "NO_VAT",
                    "price": 332,
                    "batchName":"K352-415N",
                    "img": "https://img.kak2c.ru/i/L/U/xgzFMUqK_c.jpg?1576164677",
                    "itemAmountState": {
                        "amountORDERED": 1,
                        "amountRESERVED": 1,
                        "amountPACKED": 1,
                        "amountSHIPPED": 1,
                        "amountDELIVERED": 0,
                        "amountLOST": 0,                       
                        "amountRETURNED": 0,
                        "amountRETURNED_DEFECTIVE": 0,
                      	"amountRETURNED_TO_CLIENT": 0
                    },
                    "skuType": "SKU",
                    "itemDimensions": {
                        "height": 8,
                        "width": 25,
                        "depth": 33
                    },
                    "itemWeight": 1000,
                  	"expirationMode": "USE_EXPIRATION",
                  	"expirationDays": 100
                },
                {
                    "num": 2,
                    "productId": "1002",
                    "productExtId": null,
                    "variantId": "1002",
                    "variantExtId": null,   
                    "name": "Набор для Бро №4: помада для волос, бальзам для бороды, гель для душа + шампунь",
                    "article": "BR00T-000117",
                    "quantity": 1,
                    "vatRate": "NO_VAT",
                    "vatSkuProduct": "NO_VAT",
                    "price": 2074,
                    "img": "https://img.kak2c.ru/i/L/s/qck3mEGu_c.jpg?1578310573",
                    "itemAmountState": {
                        "amountORDERED": 1,
                        "amountRESERVED": 1,
                        "amountPACKED": 1,
                        "amountSHIPPED": 1,
                        "amountDELIVERED": 0,
                        "amountLOST": 0,                       
                        "amountRETURNED": 0,
                        "amountRETURNED_DEFECTIVE": 0
                    },
                    "skuType": "SKU",
                    "itemDimensions": {
                        "height": 8,
                        "width": 25,
                        "depth": 33
                    },
                    "itemWeight": 1000
                },
                {
                    "num": 3,
                    "productId": null,
                    "variantId": "delivery",
                    "name": "Доставка",
                    "quantity": 1,
                    "vatRate": "NO_VAT",
                    "vatSkuProduct": "NO_VAT",
                    "price": 281,
                    "skuType": "SERVICE"
                }
            ],
            "packings": [
                {
                    "barcode": "7878000138251",
                  	"fbmStickerBarcode": "WB_0032345",
                  	"palletBarcode": "pl705970976005-1",                  
                    "measurements": {
                        "success": true,
                        "weight": 790,
                        "dimensions": {
                            "height": 130,
                            "width": 280,
                            "depth": 130
                        }
                    },
                    "items": [
                        {
                            "num": 1,
                            "productId": "1001",
                            "productExtId": null,
                            "variantId": "1001",
                            "variantExtId": null,   
                            "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                            "article": "BR00T-000140-2",
                            "quantity": 1,
                            "vatRate": "NO_VAT",
                            "price": 332,
                            "img": "https://img.kak2c.ru/i/L/U/xgzFMUqK_c.jpg?1576164677",
                            "skuType": "SKU",
                            "accountingAttributes": [
                              {
                                "code": "chestnyznak",
                                "stringValue": "11111",
                                "n": 1
                              }
                            ],
                          	"specials": true
                        },
                        {
                            "num": 2,
                            "productId": "1002",
                            "productExtId": null,
                            "variantId": "1002",
                            "variantExtId": null,   
                            "name": "Набор для Бро №4: помада для волос, бальзам для бороды, гель для душа + шампунь",
                            "article": "BR00T-000117",
                            "quantity": 1,
                            "vatRate": "NO_VAT",
                            "price": 2074,
                            "img": "https://img.kak2c.ru/i/L/s/qck3mEGu_c.jpg?1578310573",
                            "skuType": "SKU",
                            "accountingAttributes": [
                              {
                                "code": "chestnyznak",
                                "stringValue": "22222",
                                "n": 2
                              }
                            ]
                        }
                    ]
                }
            ],
          	"pallets": [
                {
                    "barcode": "pl705970976005-1",
                  	"fbmStickerBarcode": "WB_PL_0032345",
                    "files": [
                        {
                            "copiesQty": 1,
                            "fileExt": "pdf",
                            "fileName": "ИП Ozon Хоругвино Шк на палету",
                            "fileSize": 22535,
                            "fileSource": "USER",
                            "fileType": "PDF",
                            "id": "aa22d7fa-65a2-6be0-8e0d-430ec6c874d3",
                            "printWhenPacking": false,
                            "success": true,
                            "url": "https://storage.yandexcloud.net/order-files-kak2c/b42eebd1-eb7e-4603-a781-5240699288d9.pdf"
                        }
                    ],
                    "measurements": {
                        "dimensions": {
                            "depth": 120,
                            "height": 100,
                            "width": 120
                        },
                        "success": true,
                        "weight": 200
                    },
                    "num": 1,
                    "packings": [
                        {
                            "barcode": "7878000138251",
                            "measurements": {
                              "success": true,
                              "weight": 790,
                              "dimensions": {
                                  "height": 130,
                                  "width": 280,
                                  "depth": 130
                              }
                          },
                            "palletBarcode": "pl705970976005-1"
                        }
                    ]
                }
            ],
            "rawDeliveryStatuses": [
                {
                  "courierStatusDate": "2019-12-18 14:43:05",
                  "statusCode": "SENDER",
                  "statusMessage": "Заявка принята",
                  "statusCity": "Чехов"
                },
                {
                  "courierStatusDate": "2019-12-18 14:43:05",
                  "statusCode": "SENDER",
                  "statusMessage": "Заявка принята",
                  "statusCity": "Чехов"
                }
            ],
            "expenses": [
                {
                    "id": "1231",
                    "status": "PLAN",
                    "type": "GENERAL",
                    "items": [
                        {
                            "type": "COD",
                            "sum": 60
                        },
                        {
                            "type": "DELIVERY",
                            "sum": 330
                        },
                        {
                            "type": "INSURANCE",
                            "sum": 6
                        }
                    ]
                }
            ],
            "files": [
                {
                    "id": "43f79bac-0d82-2d82-f11d-abd1a53b26a0",
                    "fileType": "DOC",
                  	"fileSource": "USER", //ESHOP | FULFILLMENT
                    "fileName": "Документ",
                    "fileExt": "doc",
                    "url": "https://storage.yandexcloud.net/order-files-kak2c/e7cf604e-7092-4243-97ba-13b3f7bb4b68.doc",
                    "printWhenPacking": true,
                    "copiesQty": 1
                }
            ],
            "customerPaymentInProcess": false,
            "warehouseName": "Tempoline",
            "warehouseCode": "6805bc64-270f-ae7d-1231-773ff181e446",
          	"permissionList": {
              "fieldPermissions": [
                {
                  "type": "ITEMS_EDITABLE",
                  "value": true,
                  "reason": null
                },
                {
                  "type": "PAYMENT_EDITABLE",
                  "value": true,
                  "reason": null
                },
                {
                  "type": "IS_PAID_EDITABLE",
                  "value": false,
                  "reason": "Для способа оплаты наложенным платежом - статус оплаты вручную изменять нельзя."
                },
                {
                  "type": "RECEIVER_EDITABLE",
                  "value": true,
                  "reason": null
                },
                {
                  "type": "DELIVERY_EDITABLE",
                  "value": true,
                  "reason": null
                },
                {
                  "type": "WAREHOUSE_EDITABLE",
                  "value": true,
                  "reason": null
                },
                {
                  "type": "COMMENTS_EDITABLE",
                  "value": true,
                  "reason": null
                }
              ],
              "actionPermissions": [
                {
                  "type": "CANCEL",
                  "value": true,
                  "reason": null
                },
                {
                  "type": "CONFIRM",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "NEED_CONFIRM",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "PACK",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "COPY",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "PACK_CONTROL",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "UNPACK",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "SHIPPING",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "UNSHIPPING",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "REFRESH_RESERVE",
                  "value": true,
                  "reason": null
                },
                {
                  "type": "RETURN_TO_DELIVERY",
                  "value": false,
                  "reason": null
                },
                {
                  "type": "REVERT_RETURNS",
                  "value": false,
                  "reason": null
                }
              ]
            },
           "packingVideos": [
        		"http://123.123.123.123:1111/video/2021-04-21/dabca048-7cfb-4e65-92a2-fce40f5ee9c2.mp4"
      		],
           "returnUnpackingVideos": [
        		"http://123.123.123.123:1111/video/2021-04-21/dabca048-7cfb-4e65-92a2-fce40f5ee9c2.mp4"
      		],
          "returns":[
            {
              "type": "RETURN", // RECLAMATION
              "date": "2021-01-15 17:47:13",
              "number": "123",
              "externalNumber": "456",
               "items": [
                        {
                            "num": 1,
                            "productId": "1001",
                            "productExtId": null,
                            "variantId": "1001",
                            "variantExtId": null,   
                            "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                            "article": "BR00T-000140-2",
                            "quantity": 1,
                           	"accountingAttributes": [
                				{
                                  "code": "chestnyznak",
                                  "stringValue": "12345"
                                }
              				],
                        }],
               "returnUnpackingVideos": [
        		"http://123.123.123.123:1111/video/2021-04-21/dabca048-7cfb-4e65-92a2-fce40f5ee9c2.mp4"
      			],
               "files": [
                {                   
                    "fileName": "Скан заявления",                    
                    "url": "https://storage.yandexcloud.net/order-files-kak2c/e7cf604e-7092-4243-97ba-13b3f7bb4b68.doc"                    
                },
                  {                   
                    "fileName": "Скан документов",                    
                    "url": "https://storage.yandexcloud.net/order-files-kak2c/e7cf604e-7092-4243-97ba-13b3f7bb4b68.doc"                    
                }
            ]
            }
          ]
          	"summaryItemAmountState": {
                "amountORDERED": 2,
                "amountRESERVED": 2,
                "amountPACKED": 2,
                "amountSHIPPED": 2,
                "amountDELIVERED": 0,
                "amountLOST": 0,
                "amountRETURNED": 0,
                "amountRETURNED_DEFECTIVE": 0,
              	"amountRETURNED_TO_CLIENT": 0
            },
            "codPayments": [
                {
                    "sum": 2225,
                    "date": "2021-01-15 17:47:13",
                    "paymentDocumentId": "1000"
                }
            ],
 			"packingOptions": [
                {
                    "packSpecialsToSeparatePackingPlace": true                   
                }
            ],
            "c": "8089832f-633a-b417-a72b-7e685e114151",
          
			"initialOrder" : null,
			"onlinePaymentType": "FULL",
			"warehouseShippingOptions": {
                "monopackingsOnly": true
            }
        }
    ]
}

 

Фильтрация

Для фильтрации есть следующие возможности:

 

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: /api/lite/orders?page=0&size=100

Если параметры не переданы, то дефолтные значения page=0&size=10

Максимальное количество записей на странице - 100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

 

Сортировка

Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.

Пример сортировки по дате (возрастание): /api/lite/orders?order=date+asc

Пример сортировки по дате (убывание): /api/lite/orders?order=date+desc

Доступные коды сортировки:

По умолчанию используется сортировка по дате заказа по убыванию.

 

Описание результата запроса

Поле Тип Редактируемое

обязательное

Описание
id string да* нет

Номер заказа.
Основной идентификатор заказа.

* Можно задать только в момент создания заказа

externalId string да нет

Внешний номер заказа – дополнительный номер заказа, например в сторонней CRM системе.

externalId2 string да нет Внешний номер заказа
externalId3 string да нет Внешний номер заказа
externalId4 string да нет Внешний номер заказа
externalId5 string да нет Внешний номер заказа
date datetime да* нет

Дата заказа

* Можно задать только в момент создания заказа

needReserve boolean да нет Нужно ли брать резерв 
createTs datetime нет - Дата создания заказа в системе (техническая)
updateTs datetime нет - Дата последнего обновления заказа.
status enum нет -

Основной статус заказа. Описывает жизненный цикл заказа.

  • ORDER_INFO_DRAFT – Черновик. Заказ свободно редактируется, может быть не полностью заполнен, обязательность полей не контролируется.
  • ORDER_INFO_NEW - Статус заказа при ошибке создания. Необходима доп проверка таких заказов. Статус Новый похож на Черновик
  • ORDER_INFO_NEED_CONFIRM – Не подтвержден. Заказ взял на себя резервы и ожидает подтверждения сотрудника интернет-магазина.
  • ORDER_INFO_INSUFFICIENT_RESERVE –  Не хватает товара. Заказ подтвержден, но не взяты резервы, без резервов нет возможности отгрузить заказ (резервы не учитываются, если стоит соответствующая настройка на складе, на который оформлен заказ).
  • ORDER_INFO_REQUIRE_PAYMENT – Ожидает оплаты. Заказ ожидает оплаты покупателем, актуально для заказов с типом оплаты paymentMethodType = ONLINE (онлайн оплата на сайте).
  • ORDER_INFO_READY_TO_PACK – Готов к комплектации. Заказ подтвержден, товар полностью зарезервирован, оплачен - все готово для начала комплектации.
  • ORDER_INFO_CONFIRM_HOLD – Перезвон. Согласование заказа приостановлено, например, покупатель не снимает трубку.
  • ORDER_INFO_PACKED_DOCUMENTS_UPLOADED - Заказ по системе FBO. После того, как все ШК/файлы будут приложены, а также внесены данные по ШК поставки, в карточке заказа появится кнопка «Документы загружены».
    Нажмите на эту кнопку, и обновлённые данные передадутся в складскую систему. Статус заказа изменится на «Упаковано, ожидает сборки».
  • ORDER_INFO_PACKED_DOCUMENTS_REQUIRED - Заказ по системе FBO. На этом этапе заказ предварительно упакован складом. На этом этапе клиенту нужно своевременно загрузить необходимые документы по FBO отгрузке.
  • ORDER_INFO_IN_PACKING – На комплектации. Комплектация (процесс упаковки) заказа начат.
  • ORDER_INFO_PACKED – Упакован. Заказ успешно упакован.
  • ORDER_INFO_SHIPPED – Отгружен. Заказ отгружен в службу доставки.
  • ORDER_INFO_COURIER – На доставке. Курьерская служба подтвердила начало доставки.
  • ORDER_INFO_DELIVERED – Доставлен. Заказ доставлен. Финальный статус.
  • ORDER_INFO_PARTIALLY_DELIVERED_NOT_RETURNED – Доставлен частично *. Заказ доставлен частично, возврат не поступал.
  • ORDER_INFO_PARTIALLY_DELIVERED_RETURNED – Доставлен частично. Заказ доставлен частично, возврат принят. Финальный статус.
  • ORDER_INFO_RETURNING – Отказ *. Заказ возвращается. Покупатель отказался от заказа (в процессе доставки), и заказ возвращается курьерской компанией обратно отправителю. Остается крайне небольшой шанс, что покупатель передумает, и заказ все же будет доставлен.
  • ORDER_INFO_RETURNED – Отказ. Покупатель отказался от заказа, заказ возвращен на склад. Финальный статус.
  • ORDER_INFO_LOST – Утерян. Заказ утерян службой доставки. Финальный статус.
  • ORDER_INFO_AT_TAKEOUT_POINT – В пункте выдачи. Заказ доставлен в пункт выдачи заказов\постамат и ожидает покупателя.
  • ORDER_INFO_CANCELED – Отменен. Заказ отменен до момента отгрузки. После момента отгрузки, этот статус не актуален. Финальный статус.
  • ORDER_INFO_WAIT_UNPACKОжидает распаковки. Упакованный заказ отменен, но не распакован.
  • ORDER_INFO_RETURNED_TO_CLIENT - Используется при работе с МП. По заказу был невыкуп и товар поступил на склад МП для последующей продажи. В этом статусе заказ пропадает из вкладки "Возвраты", его можно найти поиском по номеру заказа. Финальный статус.
  • ORDER_INFO_DONE – устаревший статус, "Выполнен". Используется для обратной совместимости, и более не используется. Аналогичен ORDER_INFO_DELIVERED.
confirmStatus enum да нет

Статус подтверждения заказа

  • NEED_CONFIRM
  • APPROVED
  • CANCELED
totalOrderSum decimal нет - Общая сумма заказа
insuranceSum decimal да нет

Размер оценочной стоимости / страховки заказа.

По умолчанию равен общей сумме заказа или рассчитывается, исходя из процента расчёта страховки, указанного в аккаунте.

insuranceSumAutoCalculation boolean да нет Если не передаётся, то по умолчанию true. Если нужно указать произвольную сумму страховки, необходимо передать insuranceSumAutoCalculation = false
paymentStatus enum да нет

Статус оплаты заказа покупателем.

  • NOT_PAID
  • PAID

Имеет смысл только для заказов с предоплатой (например, оплата картой на сайте).

Заказы с оплатой ONLINE, и NOT_PAID - не передаются на комплектацию.

paymentMethodType enum да нет

Тип оплаты заказа.

  • COD_CASH – наложенный платеж (наличными). Оплата при вручении.
  • COD_CARD – наложенный платеж (картой). Оплата при вручении. С точки зрения многих курьерских служб COD_CASH и COD_CARD никак не отличаются, так как курьеры как правило готовы принять оплату на терминал. Тем не менее, рекомендуется в случае необходимости наложенного платежа передавать именно COD_CARD (так как наличные всегда принимаются курьерами по умолчанию).
  • ONLINE – предоплата заказа (картой на сайте).
  • NO_COD – особая разновидность предоплаты. Используется, например, для предоплаты заказа по счету для B2B клиентов. Заказ передается на отгрузку, только если paymentStatus=PAID.
  • NO_COD_NO_CONTROL – аналогично NO_COD, только параметр paymentStatus не контролируется (на комплектацию и отгрузку заказ передается в любом случае).
paymentMethodCode string да нет

Код и наименование способа оплаты заказа. 

Базовые способы оплаты (по умолчанию), в формате
paymentMethodCode (paymentMethodType) "paymentMethodName":

  • cod-cash (COD_CASH) "Оплата наличными при получении"
  • cod-card (COD_CARD) "Оплата картой при получении"
  • online (ONLINE) "Предоплата картой на сайте"
  • no-cod (NO_COD) "Без наложенного платежа"
paymentMethodName string нет - Наименование способа оплаты
needCustomerPayment boolean нет -

Флаг, указывающий на необходимость оплаты заказа покупателем перед отгрузкой.

Например, если paymentMethodType = ONLINE и paymentStatus = NOT_PAID, тогда needCustomerPayment = true

customerPaymentExternalId string нет - Id оплаты у экваера (для онлайн оплаты)
warehouseName string да нет Название склада
comment string да нет Комментарий покупателя к заказу
promocode string да нет Код примененного промокода к заказу
promocodeAppliedDiscount decimal нет - Общая сумма скидки, примененная к заказу
urlParams string да нет

Сырые данные URL запроса, с которыми покупатель пришел на сайт. В формате JSON. 

Как правило, в основном это UTM метки, для понимания рекламного канала, с которого пришел покупатель.

shortUrl string нет -

Сокращенная ссылка на заказ. Используется для предоставления покупателю, например в SMS.

Например http://r.kak2c.ru/i806zlu

b2bFlag boolean да нет

B2B заказ. Если true, то биллинг по такому заказу будет считаться как для B2B.

*Настройка для B2B включается по запросу клиента; по умолчанию не используется.

c string нет -

Секретный ключ для доступа к заказу через публичный метод получения заказа.

Пример значения: 94ccc02a-2379-0eac-e5cf-260485cc35bd

customData string да нет Дополнительная информация по заказу, возможно сохранить и получить, для передачи в другие системы. Например, сохранить произвольный json.
tags Array нет - Массив идентификаторов меток (возможные метки получаются отдельным запросом) - для чтения
orderTag string да нет

Метка для добавления заказу
Необходимо передавать название метки (name)

Предварительно необходимо создать метку с таким названием

excludeFromSummary
boolean да нет

Признак true исключит заказ из статистики. Меняется запросом /api/lite/order-exclude-change

orderType enum нет -

Тип заказа

  • STANDARD – стандартный заказ интернет-магазина. Бизнес-логика для такого заказа отрабатывает стандартным образом.
  • CUSTOM – заказ с нестандартной логикой. Заказ с подобным типом возможно оплатить и возможно подтвердить. Но он никогда не будет брать резервов, упаковываться и отгружаться. Используется для разработки нестандартных решений.
orderSubType string да нет

Подтип заказа, в случае orderType = CUSTOM.

 

summaryItemAmountState Object нет -

вывод суммарных оборотных данных по заказу

например: 
"amountORDERED": 3,
"amountRESERVED": 0,
"amountPACKED": 0,
"amountSHIPPED": 0,
"amountLOST": 0,
"amountDELIVERED": 0,
"amountRETURNED": 0,

"amountRETURNED_DEFECTIVE": 0

isMarketplaceOrder boolean нет -

Флаг, определяющий заказы маркетплейсов

plannedTakeOutDate datetime нет -

Дата планируемой отгрузки

readyForFFExport boolean нет -

Флаг, определяющий готовность заказа к выгрузке в Темполайн

delivery Object да да

Объект, описывающий доставку

 

 

code - технический код службы доставки


title - название доставки


type - тип доставки

 

actualDeliveryDate - фактическая дата доставки
(пример: 2020-11-19 17:07)


address - объект, описывающий адрес доставки


courierPlanDeliveryDate - планируемя дата доставка
(пример: 2020-11-19 00:00)


courierPlanDeliveryDateChangeReason - причина изменения даты доставки


deliveryServices - доп. опции доставки:

  • CHECK_CONTENT - осмотр вложения
  • CONTACTLESS_DELIVERY - бесконтактная доставка
  • DANGEROUS_CARGO - опасный груз
  • DAY_OFF_DELIVERY - проверка состояния
  • DELIVERY_DATE_APPROVE - согласование даты и времени доставки
  • LIFT_TO_DOOR - погрузо-разгрузочные работы на лифте
  • LIFT_TO_DOOR_MANUAL - погрузо-разгрузочные работы на руках
  • PARTIAL_DELIVERY - частичная доставка
  • PERSONALLY_IN_HANDS - лично в руки
  • REVERSE - возврат сопроводительных документов
  • TEMPERATURE_REGIME - температурный режим
  • TRYING - примерка
  • VERIFY - проверка состояния
  • WAITING_ON_ADDRESS - Ожидание на адресе

deliveryComment - комментарий к доставке


deliverySumBelowLimitAmount - нижняя граница ограничения стоимости доставки


deliverySumLimitAmount - верхняя граница ограничения стоимости доставки

 

isDeliverySumLimitActive - флаг включения ограничения стоимости доставки


desiredDeliveryTimeFrom - желаемое время доставки, с
(пример: 09:00)


desiredDeliveryTimeTo - желаемое время доставки, до
(пример: 18:00)


desiredDeliveryDate - желаемая дата доставка


isDeliverySumLimitActive - активировано ограничение суммы доставки


logoUrl - ссылка на логотип службы доставки


pickupPointId - идентификатор ПВЗ


pvzComment - комментарий для ПВЗ


receiver - объект, описывающий получателя доставки


trackingNumber - трэк-номер доставки


trackingURL - ссылка на страницу отслеживания доставки

 

savedAddressId - id адреса, сохранённого с помощью запроса /api/lite/pub/save_dadata_address (используется для интеграции с 1С-Битрикс)

code

ранее deliveryCode

string да да

Технический идентификатор способа доставки (договора доставки).

Пример: 258296e9-acee-4361-a55b-bd4c3f3913af

deliveryCode

 

string нет -

Код способа доставки из тарификатора

Пример: 258296e9-acee-4361-a55b-bd4c3f3913af

type

enum нет -

Тип доставки:

  • COURIER - курьером до двери
  • PVZ - в пункт выдачи заказов
  • RUSSIAN_POST - в отделение Почты России

title

ранее courier

string нет -

Наименование курьерской службы

Пример: Boxberry

pickupPointId string да да*

Идентификатор пункта выдачи заказов (в рамках выбранной курьерской службы)

* Если доставка в ПВЗ / постамат

logoURL string нет - Прямая ссылка на логотип службы доставки.

trackingNumber

ранее был вне delivery

string нет - Как правило, заполняется в момент получения данных от курьерской компании.

trackingURL

ранее trackingLink

string нет -

Полная ссылка на трекинг.

Пример: https://boxberry.ru/tracking/11122233.

 

UPD: 2023-07-05

desiredDeliveryDate date да нет

Желаемая покупателем дата доставки. 

Кактус передает эту информацию в курьерские службы как рекомендательный параметр. Не все курьерские службы учитывают эту информацию. 

desiredDeliveryTimeFrom": "09:00",

ранее timeFrom

HH:ss да нет

Желаемое время доставки "от". С лидирующими нулями.

Пример "09:00".

"desiredDeliveryTimeTo": "20:00",

ранее timeTo

HH:ss да нет

Желаемое время доставки "по". С лидирующими нулями.

Пример "20:00".

deliveryComment string да нет

Комментарий для целей доставки.

Поле устарело. Рекомендуется использовать поле comment.

pvzComment string нет -

В случае способа доставки через ПВЗ, содержит адрес и время работы ПВЗ.

actualDeliveryDate string нет -

Дата фактической доставки от курьерской службы

courierPlanDeliveryDate date нет -

Плановая дата доставки от курьерской службы

courierPlanDeliveryDateChangeReason string нет -

Причина переноса плановой даты доставки от курьерской службы

address Object да да

Объект, описывающий адрес доставки

 

ВАЖНО: в случае передачи адреса в компонентах адреса строковое поле fullAddress игнорируется (будьте внимательны при заполнении значений, пожалуйста, не путайте поля building и block)

Для проверки парсинга компонентов адреса, можно передавать ожидаемый адрес в поле rawData и после обработки сравнивать его с итоговым полем fullAddress. Если поле rawData не было передано, то оно заполнится автоматически из переданного поля fullAddress перед парсингом компонентов, а в поле fullAddress запишется результат парсинга.

countryCode string да нет

Двухбуквенный код страны по стандарту ISO 3166-1 (Alpha 2).

https://ru.wikipedia.org/wiki/ISO_3166-1

country string да нет Страна прописью
region string да нет (для Почты РФ - да) Регион. Для РФ - по ФИАС.
area string да нет Район. Для РФ - по ФИАС.
city string да да*

Город. Для РФ  - по ФИАС.

* если не задан населенный пункт

settlement string да да*

Населенный пункт. Для РФ - по ФИАС.

* если не задан город

street string да да*

Улица (в т.ч. проспект/проезд/и т.п. - пример: "проспект Победы")

* если курьерская доставка и не задан дом

house string да да*

Дом

* если курьерская доставка и не задана улица

block string да нет Корпус
building string да нет Строение
flat string да нет Квартира/Офис
fullAddress string да нет Полный адрес (адрес одной строкой)
floor integer да нет*

Этаж

*при передаче в deliveryServices LIFT_TO_DOOR_MANUAL этаж -- обязателен для заполнения

fullCity string да нет Полное наименование города (вместе с типом)
rawData string да нет Адрес в "сыром" виде - как он изначально был загружен вместе с заказом.
zip string да нет Почтовый индекс
regionFias string да да

Код региона по ФИАС

(поле обязательно, кроме доставки самовывозом)

areaFias string да да*

Код района по ФИАС

* должен быть задан хотя бы 1 фиас из 3х (areaFias, cityFias, settlementFias), если поле присутствует в классификаторе фиас

(поле обязательно, кроме доставки самовывозом)

cityFias string да да*

Код города по ФИАС

* должен быть задан хотя бы 1 фиас из 3х (areaFias, cityFias, settlementFias) 

(поле обязательно, кроме доставки самовывозом)

settlementFias string да да*

Код населенного пункта по ФИАС

* должен быть задан хотя бы 1 фиас из 3х (areaFias, cityFias, settlementFias) 

(поле обязательно, кроме доставки самовывозом)

receiver Object да да Объект, описывающий получателя заказа
name string да да Имя
surname string да нет Фамилия
patronymic string да нет Отчество
phone string да да Телефон
alternativePhone string да нет Альтернативный телефон
email string да нет Почтовый адрес
pvzInfo Object нет - Объект с информацией о пункте выдачи
address Object нет - Объект с адресом пункта выдачи
metroStation
string нет - Ближайшая станция метро
latitude
string нет - Широта
longitude
string нет - Долгота
code
string нет - Код пункта выдачи
courier
string нет - КС
courierCode
string нет - Код КС
description
string нет - Описание
maxSize
string нет -

Максимальные габариты в см

Либо 1 число - сумма 3х измерений

Либо в формате 36x36x60

maxWeight
integer нет - Максимальный вес в кг
workTime
string нет - Время работы
paymentMethods
Array of enum нет - Доступные способы оплаты. (COD_CASH, COD_CARD)
type
enum нет - Тип пункта выдачи:
  • Postamat
  • PVZ
  • CASHIER_ISSUE_POINT
courierPostamatType
string нет - Тип пункта выдачи по версии КС
legalEntity Object да нет

Контрагент покупатель, с юридической точки зрения.

Если покупатель - обычное физическое лицо, type = PERSON, если юридическое лицо (ИП, ООО и т.п.), type = COMPANY

id string да нет Идентификатор контрагента
type enum да нет

Тип контрагента:

  • PERSON - физическое лицо
  • COMPANY - юридическое
name string да нет Наименование контрагента
items Array of Objects да да Массив объектов - позиции заказа.

ВАЖНО: Доставку необходимо передавать всегда последним элементом списка
num integer да да Номер строки

variantId

ранее skuId

string да да

Идентификатор варианта - основной идентификатор позиции заказа. У продукта всегда есть один вариант.

В случае строки "Доставка", содержит "delivery".

productId string нет -

Идентификатор продукта. Общий идентификатор (один продукт может иметь несколько вариантов).

В случае строки "Доставка", содержит "delivery".

name string нет - Наименовании позиции заказа

article

ранее skuArticle

string да нет Артикул
quantity decimal да да

Количество заказанного товара

quantityReserved decimal нет - Количество зарезервированного товара. Для начала комплектации, оно должно совпадать с количеством заказанного (все товары должны быть зарезервированы).
quantityAvailable decimal нет - Количество доступного данного товара к продаже (за минусом зарезервированного).
vatRate enum да нет

Ставка НДС для строки заказа:

  • NO_VAT – без НДС (например, для компаний на УСН)
  • VAT_0
  • VAT_10
  • VAT_18
  • VAT_20
vatSkuProduct enum нет -

Ставка НДС в карточке данного продукта

  • NO_VAT – без НДС (например, для компаний на УСН)
  • VAT_0
  • VAT_10
  • VAT_18
  • VAT_20
price decimal да да Стоимость единицы позиции
img string нет - Полная ссылка на картинку с товаром
sum decimal нет - Итоговая сумма по строке
itemAmountState Object нет -

для товаров - вывод оборотных данных по заказу по каждой позиции

например: 
"amountORDERED": 3,
"amountRESERVED": 0,
"amountPACKED": 0,
"amountSHIPPED": 0,
"amountLOST": 0,
"amountDELIVERED": 0,
"amountRETURNED": 0,

"amountRETURNED_DEFECTIVE": 0

"amountRETURNED_TO_CLIENT": 0

skuType enum нет -

Тип позиции:

  • SKU – Товар
  • SKUSET – Набор (виртуальный товар, содержащий реальные SKU)
  • SERVICE – Услуга, например "Доставка"
expirationMode enum да нет

Режим работы по срокам годности

  • USE_EXPIRATION
  • NO_EXPIRATION
expirationDays integer да нет

Желаемое допустимое максимальное число дней до окончания срока годности к отгрузке. Например, при значении 100 - склад сможет подбирать в заказ товары где минимальный остаточный срок годности - не менее 100 суток.

batchName
string да нет

Желаемый номер партии товара.
Если значение указано, при сборке заказа будет использован товар из данной партии

accountingAttributes Object нет -

Атрибуты учёта, например, ЧЗ или серийный номер

code enum нет -

Тип атрибута учёта::

  • chestnyznak - ЧЗ
  • uniquenumber - уникальный номер
stringValue string нет -

Значение атрибута учёта

n integer нет -

Порядковый номер атрибута учёта

optionsUsed Object нет -

Используемые свойства, характеризующие данный вариант (если используются варианты для данного продукта).

code string нет - Код свойства, например "size"
value string нет - Значение свойства, например "XL"
packings Object нет -

Упаковки (транспортные места) заказа. Содержит информацию только после упаковки заказа (в том числе частичной упаковке).

 

barcode string нет - Штрихкод места (упаковки)
measurements Object нет - Габариты и вес упаковки при упаковке на складе
weight decimal нет - Вес упаковки в граммах
dimensions Object нет -

Содержит размеры упаковки в миллиметрах

Пример

{

"height": 120,
"width": 120,
"depth": 120

}

measurementsOnSort Object нет - Габариты и вес упаковки, измеренные в процессе сортировки (если измерения проводились)
weight decimal нет - Вес упаковки в граммах
dimensions Object нет - Содержит размеры упаковки в сантиметрах
items Object нет - Содержимое упаковки (структура аналогична items заказа)
expenses Array нет - Расходы по данному заказу. Например, расходы на доставку, на страховку, на наложенный платеж, на фулфилмент операции - и т.д.
files
Array нет - Прикрепленные к заказу файлы
rawDeliveryStatuses Object нет - Статусы от курьерской компании
courierStatusDate date нет - Дата статуса от курьерской компании
statusCode string нет - Код статуса
statusMessage string нет - Сообщение к статусу
statusCity
string нет - Город
permissionList Object нет - Список разрешений для заказа (только для fullInfo=true)
fieldPermissions Array нет -

Список разрешений на внесение изменений в группы полей заказа

- type = одно из значений групп полей заказа:

ITEMS_EDITABLE, PAYMENT_EDITABLE, IS_PAID_EDITABLE, RECEIVER_EDITABLE, DELIVERY_EDITABLE, WAREHOUSE_EDITABLE), COMMENTS_EDITABLE

- value - флаг, разрешены ли изменения

- reason - причина запрета, если value  = false

actionPermissions Array нет -

Список разрешений на действия с заказом (кнопки)

- type = одно из значений действий с заказом:

CANCEL, CONFIRM, NEED_CONFIRM, PACK, COPY, PACK_CONTROL, UNPACK, SHIPPING, UNSHIPPING, REFRESH_RESERVE, RETURN_TO_DELIVERY, REVERT_RETURNS

- value - флаг, разрешены ли изменения

- reason - причина запрета, если value  = false

codPayments Array нет -

Список переводов наложенных платежей по данному заказу

packingVideos Array нет - Ссылки не видео упаковки заказа
returnUnpackingVideos Array нет - Ссылки не видео приемки возврата заказа
initialOrder string да нет

Технический id изначального заказа (заказ-подписка например)

packingOptions Array да нет

Список опций упаковки

onlinePaymentType enum да нет

Тип онлайн оплаты:

  • FULL
  • RECURRENT
crossdockEditable boolean нет - флаг, что заказ еще доступен для редактирования (только для аккаунтов в выключенным резервированием по умолчанию и только при запросе по id заказа). Редактировать заказ можно только при значении true
warehouseShippingOptions Object да нет

Настройки отгрузки

monopackingsOnly - флаг использования монокоробов (устаревший)
packingType - тип упаковки:
  • MIX_PACKINGS - смешанная упаковка
  • MONO_PACKINGS - монокороба
  • MONO_PALLETS - монопаллеты

 

originClientNumber string нет нет

идентификатора магазина на маркет плэйсе, для OZON & MegaMarket - логин продавца, для WB & Яндекс Маркет - код магазина

Пример запроса по одному заказу и полными данными:
/api/lite/orders?id=4249-756&full_info=true

 

Пример результата запроса

Пример запроса по списку заказов:
/api/lite/orders?order=id+desc

 

Пример результата запроса

{
"success": true,
"recordsTotal": 2,
"orders": [
{
"id": "7277-1002",
"externalId": "extId",
"externalId2": "extId2",
"externalId3": "extId3",
"externalId4": "extId4",
"externalId5": "extId5",
"date": "2020-01-22 16:37:56",
"needReserve": true,
"createTs": "2020-01-22 16:37:57.528",
"updateTs": "2020-01-22 16:37:57.528",
"status": "ORDER_INFO_DRAFT",
"totalOrderSum": 999,
"insuranceSum": 999,
"insuranceSumAutoCalculation":true,
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "online",
"needCustomerPayment": false,
"confirmStatus": "APPROVED",
"comment": "",
"tags": [],
"delivery": {
"code": "PICKPOINT",
"type": "PVZ",
"title": "PickPoint",
"pickupPointId": "12345",
"logoUrl": null,
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": "2020-02-14",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул",
"fullCity": null,
"rawData": null,
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
},
"receiver": {
"name": "Петр",
"surname": "толстой",
"patronymic": "",
"phone": "89011111111",
"alternativePhone": "",
"email": "petr@petr.net",
"post": null,
"personType": null
}
},
"legalEntity": {
"id": "09684293-9e6d-a9c2-d114-28d25b5914dc",
"type": "PERSON",
"name": " Розничный покупатель"
},
"items": [
{
"num": 1,
"productId": "1001",
"productExtId": null,
"variantId": "1001",
"variantExtId": null,
"name": "Кактус Цереус",
"quantity": 1,
"price": 999,
"img": "https://img.kak2c.ru/i/j/j/tYqAVdh1_c.jpg?1579689505",
"skuType": "SKU",
"itemAmountState": {
"amountORDERED": 3,
"amountRESERVED": 0,
"amountPACKED": 0,
"amountSHIPPED": 0,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountRETURNED": 0,
"amountRETURNED_DEFECTIVE": 0
}
},
{
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"price": 0,
"skuType": "SERVICE"
}
],
"customerPaymentInProcess": false,
"c": "f300ae30-507c-2d36-d37c-e6397084b6e2"
},
{
"id": "7277-1001",
"date": "2020-01-22 11:17:35",
"updateTs": "2020-01-22 11:17:47.399",
"status": "ORDER_INFO_REQUIRE_PAYMENT",
"totalOrderSum": 1232,
"insuranceSum": 1232,
"insuranceSumAutoCalculation":true,
"paymentStatus": "NOT_PAID",
"paymentMethodCode": "online",
"needCustomerPayment": false,
"comment": "",
"tags": [],
"delivery": {
"code": "PICKPOINT",
"type": "PVZ",
"title": "PickPoint",
"pickupPointId": "12345",
"logoUrl": null,
"trackingNumber": null,
"trackingURL": null,
"desiredDeliveryDate": "2020-02-14",
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "20:00",
"deliveryComment": "Поскорее",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Алтайский",
"area": null,
"city": "Барнаул",
"settlement": null,
"street": "",
"house": "",
"block": "",
"building": "",
"flat": "",
"fullAddress": "Алтайский, Барнаул",
"fullCity": null,
"rawData": null,
"zip": "",
"regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
"areaFias": null,
"cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
"settlementFias": null
},
"receiver": {
"name": "Петр",
"surname": "толстой",
"patronymic": "",
"phone": "89011111111",
"alternativePhone": "",
"email": "petr@petr.net",
"post": null,
"personType": null
}
},
"legalEntity": {
"id": "09684293-9e6d-a9c2-d114-28d25b5914dc",
"type": "PERSON",
"name": " Розничный покупатель"
},
"items": [
{
"num": 1,
"productId": "1001",
"productExtId": null,
"variantId": "1001",
"variantExtId": null,
"name": "Кактус Цереус",
"quantity": 1,
"price": 999,
"img": "https://img.kak2c.ru/i/j/j/tYqAVdh1_c.jpg?1579689505",
"skuType": "SKU",
"itemAmountState": {
"amountORDERED": 0,
"amountRESERVED": 0,
"amountPACKED": 0,
"amountSHIPPED": 0,
"amountDELIVERED": 0,
"amountLOST": 0,
"amountRETURNED": 0,
"amountRETURNED_DEFECTIVE": 0
}
},
{
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"quantity": 1,
"price": 233,
"skuType": "SERVICE"
}
],
"customerPaymentInProcess": false,
"c": "ce7b72b3-effb-4f57-56d7-b025b968cff0"
}
]
}

 

Создание/редактирование заказа

/api/lite/orders

Создание/редактирование заказа для кабинета.

Если указан параметр id - то система будет пробовать найти заказ с указанным номером и отредактировать его, иначе - создаст новый с указанным id.

Если параметр id не указан - система создаст новый заказ и присвоит внутренний номер.


Пример запроса

{ 
            "id": "111",
            "externalId": "extId",
            "externalId2": "extId2",
            "externalId3": "extId3",
            "externalId4": "extId4",
            "externalId5": "extId5",
            "date": "2020-02-22 16:37:56",
            "needReserve": true,
            "totalOrderSum": 999,
            "insuranceSum": 999,
            "insuranceSumAutoCalculation":true,
            "paymentStatus": "NOT_PAID",
            "paymentMethodCode": "online",
            "needCustomerPayment": false,
            "confirmStatus": "APPROVED",
            "comment": "",
  			"promocode":"covid1984",
            "tags": [],
  			"orderTag": "tag1",
            "delivery": {
                "code": "PICKPOINT",
                "type": "PVZ",
                "title": "PickPoint",
                "pickupPointId": "12345",
                "logoUrl": null,
                "trackingNumber": null,
                "trackingURL": null,
                "desiredDeliveryDate": "2020-02-14",
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "20:00",
                "deliveryComment": "Поскорее",
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Алтайский",
                    "area": null,
                    "city": "Барнаул",
                    "settlement": null,
                    "street": "",
                    "house": "",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Алтайский, Барнаул",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "",
                    "regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
                    "areaFias": null,
                    "cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
                    "settlementFias": null
                },
                "receiver": {
                    "name": "Петр",
                    "surname": "толстой 2",
                    "patronymic": "",
                    "phone": "89011111111",
                    "alternativePhone": "",
                    "email": "petr@petr.net",
                    "post": null,
                    "personType": null
                },
                "deliveryServices": [
                    "CHECK_CONTENT"
                ]
            },
            "legalEntity": {
                "id": "09684293-9e6d-a9c2-d114-28d25b5914dc",
                "type": "PERSON",
                "name": " Розничный покупатель"
            },
            "items": [
                {
                    "num": 1,
                    "variantId": "1001",
                    "variantExtId": null,
                    "name": "Кактус Цереус",
                    "quantity": 2,
                    "price": 522,
                    "vatRate": "VAT_20",
                    "batchName":"K352-415N",
                    "bundleOptionalVariants": [
                        "1012"
                    ]
                },
                {
                    "num": 2,
                    "variantId": "delivery",
                    "name": "Доставка",
                    "quantity": 1,
                    "price": 35,
                    "vatRate": "VAT_20"                     
                }
            ],         
            "warehouseName": "Свой склад",  		
            "initialOrder" : "5dgasfwe-7f1b-c54-897e-30bc628f45e8",
			"onlinePaymentType": "RECURRENT",
  			"warehouseShippingOptions": {
				"packingType": "MIX_PACKINGS"
			}
        }

В ответ возвращается

 

Успех:

{
    "c": "e172df57-f217-6091-b7fd-d668a67b6df4",
    "orderId": "1222-1005",
    "shortUrl": "http://r.kak2c.ru/ocq0kmf",
    "status": "ORDER_INFO_NEED_CONFIRM",
    "success": true
}

 

Ошибка:

{
"success": false,
"errors": [
{
"code": 0,
"message": "Текст ошибки"
}
]
}

 

Пример минимального набора данных по заказу, которые надо передать, чтобы он успешно создался:

* значения полей "code" и "variantId" - должны соответствовать значениям, существующим на данном аккаунте

{
	"delivery": {
		"address": {
			"city": "Москва",
          	"cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
          	"regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5"
		},
		"code": "ad5f7e6f-0ecb-45bf-3f6e-e3d21d2129be",
		"receiver": {
			"name": "Иван",
			"phone": "79688876655"
		}
	},
	"items": [
		{
			"num": 1,
			"variantId": "1130659",
			"quantity": 1,
			"price": 100
		},
		{
			"num": 2,
			"price": 0,
			"quantity": 1,
			"variantId": "delivery"
		}
	]
}

 

 

 

 

 

Заказы

/api/lite/orders/cancelled

Заказ → отменить

/api/lite/orders/cancelled

Производит отмену заказа. 

пример запроса:

{ 
"orderId":"1029" 
}

В ответ возвращается

успех:

{
"success": true

}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Заказы

/api/lite/orders/confirm

Заказ - подтверждение

/api/lite/orders/confirm

Проставление статуса Подтверждения у заказа.

Пример запроса

{ 
    "id":"1234",
    "confirmStatus": "APPROVED", // HOLD/CANCELED
  	"repeatConfirmationDate": "2021-01-01 12:00:00"  // для статуса HOLD
}        

В ответ возвращается

успех:

{
    "success": true,
    "confirmStatus": "APPROVED" // HOLD/CANCELED 
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ - подтверждение массовое

/api/lite/orders/confirm/batch

Проставление статуса Подтверждения у списка заказов.

Пример запроса

{ 
    "orders":["1234", "5678"],
    "confirmStatus": "APPROVED" // HOLD/CANCELED
}        

В ответ возвращается

успех:

{
    "success": true,
    "confirmStatus": "APPROVED" // HOLD/CANCELED 
    "orders": [
        {
            "id": "1234",
            "success": true,
            "confirmStatus": "APPROVED",
            "errors": null
        },
        {
            "id": "5678",
            "success": false,
            "confirmStatus": "NEED_CONFIRM",
            "errors": [
             {
               "code": 0,
               "message": "Текст ошибки"
            }         
        }
    ]
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Заказы

/api/lite/orders/payment

Проставить статус оплаты заказа

/api/lite/orders/payment

Проставление статуса оплаты у заказа.

Пример запроса

{ 
    "id":"1234",
    "paymentStatus": "PAID" // NOT_PAID
}        

В ответ возвращается

успех:

{
    "success": true,
    "paymentStatus": "PAID" // NOT_PAID
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Заказы

/api/lite/orders/delivery_result

Заказ - отметить доставку

/api/lite/orders/delivery_result

Для доставки своими курьерами - простановка результата доставки: доставлен/отказ/утеря

 

Пример запроса

{
  "orderId": "123456abc",
  "result": "DELIVERED", //LOST,RETURNING,RETURNED
  "comment": "abcd"
}

 

Ошибка

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Заказы

/api/lite/orders/history

Получение истории по заказу

/api/lite/orders/history

Возвращает историю событий по указанному заказу

Обязательный параметр: id заказа

 

Пример ответа:

{
    "success": true,
    "events": [
        {
            "id": "2ebbb234-156e-2362-2dad-79556ea3ee14",
            "level": "INFO",
            "type": "Документы",
            "subType": "Изменения заказа",
            "orderDocStage": "Новый",
            "eventDate": "2020-01-15 11:57:05.159",
            "description": "Заказ 1285-1000. Покупатель: Ываыва; тел.: +7 (900) 111-11-14\n\nДобавлена строка: #2. [1002] Кактус Рипсалис, 3 шт., Цена с НДС: 22 RUB, НДС: 20%, Сумма с НДС: 66 RUB. \n\nСпособ оплаты: Без наложенного платежа; Статус оплаты: Оплачен\nАдрес доставки: Москва, ул Озёрная, д 31 Канал доставки: CUSTOM\n",
            "changeSource": "USER",
            "userLogin": "test@test.ru",
            "eventParameters": {              
                "apiUrl": "http://myshop-xb527.myinsales.ru",
                "login": "kak2c-delivery"
            }
        },
        {
            "id": "bf6e88a8-98bc-2f28-9973-bc870e8f1b67",
            "level": "INFO",
            "type": "Документы",
            "subType": "Заказ ожидает подтверждения",
            "orderDocStage": "Не подтвержден",
            "eventDate": "2020-01-15 11:57:05.298",
            "description": "Заказ 1285-1000. ",
            "changeSource": "USER",
            "userLogin": "test@test.ru",
            "eventParameters": null
        }
    ]       
}

 

Заказы

/api/lite/orders/invoice_and_stiсker

Заказ → получить инвойс + стикер к заказу

/api/lite/orders/invoice_and_stiсker

Получение комбинированной печатной формы инвойс + стикер, в формате PDF + base64

номер заказа передается в параметре id, например

?id=1025

 

Успех:

{
  "success": true, 
  "content" : "base64data"
     
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Текст ошибки"
    }
  ]
}
Заказы

/api/lite/orders/items

Заказ → обновление товарной части

/api/lite/orders/items

Возможность обновить только табличную часть заказа

Необходимо в запросе передать новое желаемое состояние табличной части в виде непустого перечня позиций

 

Запрос:

{
    "id": "1234",  
    "items": [
            {
               "num": 1,
                "variantId": "1001",
                "productId": "1001",
                "name": "Кактус Цереус",
                "quantity": 2,
                "price": 522,
                "vatRate": "VAT_20"         
            }
        ],
  		"searchColumnType": "HUMANID" //"EXTID"|"ARTICLE"|"BARCODE" Поле для поиска номенклатуры. Если не задано, то поиск идёт по HUMANID
            
}

 

Пример успешного ответа:

{
    "success": true  
}

 

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}

 

_________________________________________________________________________________________________________________________________________

Если orderType = KAKTUS_CONSOLIDATION, то если передаются итемы, которых нет в Кактусе, то будет происходить автосоздание номенклатуры (задача 11972):  Sku + SkuProduct + их настройки *liteApiSettings. Также есть возможность проставить признаки учета по уникальным номерам (например, Честный знак).

Заказы

/api/lite/orders/nearest

Получение ближайших заказов к заданному

/api/lite/orders/nearest

Возвращает по 10 заказов до и после указанного (включая заданный), считая по дате заказа

Обязательный параметр: id заказа. Например:

api/lite/orders/nearest?id=1285-1001

Формат ответа аналогичен списку заказов

Пример ответа:

{ 
    "success": true,
    "recordsTotal": 8,
    "orders": [
        {
            "id": "1285-1000",
            "date": "2020-01-15 11:56:21",
            "updateTs": "2020-01-15 11:57:23.169",
            "status": "ORDER_INFO_READY_TO_PACK",
            "totalOrderSum": 66,
            "paymentStatus": "PAID",
            "paymentMethodCode": "no-cod",
            "needCustomerPayment": false,
            "tags": [],
            "delivery": {
                "code": "eefbe980-1e3b-d973-ef24-6e92399ca702",
                "type": "COURIER",
                "title": "CUSTOM",
                "pickupPointId": null,
                "logoUrl": null,
                "trackingNumber": null,
                "trackingURL": null,
                "desiredDeliveryDate": null,
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "18:00",
                "deliveryComment": null,
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": "ул Озёрная",
                    "house": "31",
                    "block": "",
                    "building": "",
                    "flat": null,
                    "fullAddress": "119361, г Москва, ул Озёрная, д 31",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "119361",
                    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "areaFias": null,
                    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "settlementFias": null
                },
                "receiver": {
                    "name": null,
                    "surname": "Ываыва",
                    "patronymic": null,
                    "phone": "+79001111114",
                    "alternativePhone": "",
                    "email": null,
                    "post": null,
                    "personType": null
                }
            },
            "legalEntity": {
                "id": "4b51fdb9-3c57-5cce-29aa-da9bb35d778d",
                "type": "PERSON",
                "name": " Розничный покупатель"
            },
            "items": [
                {
                    "num": 1,
                    "variantId": "delivery",
                    "name": "Доставка",
                    "quantity": 1,
                    "price": 0,
                    "skuType": "SERVICE"
                },
                {
                    "num": 2,
                    "variantId": "1002",
                    "productId": "1002",
                    "name": "Кактус Рипсалис",
                    "quantity": 3,
                    "price": 22,
                    "img": "https://img.kak2c.ru/i/P/o/1X8eNZVj_c.jpg?1579013978",
                    "skuType": "SKU"
                }
            ],
            "customerPaymentInProcess": false,
            "warehouseName": "Свой склад",
            "c": "59b34def-1077-9050-541b-b7c3290c9fd8"
        },
        ...
    ]
}
Заказы

/api/lite/orders/receiver

Заказ → обновление контактной информации получателя

/api/lite/orders/receiver

Возможность обновить только контактную информацию

id - номер заказа

 

Запрос

{
     "id": "1234",
     "name": "Олег",
     "surname": "Коробов",
     "patronymic": "",
     "phone": "9153112255",
     "alternativePhone": "",
     "email": "korobov.oleg@gmail.com",
     "passport": {
         "series": "1234",
         "number": "123123"
         "date": "2022-01-24"
	 }
}

 

Пример успешного ответа

{
    "success": true  
}

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}
Заказы

/api/lite/orders/refresh-reserve

Обновление резервов по заказу

/api/lite/orders/refresh-reserve

Обновляет резервы по заказу, основываясь на версии заказа в бэкенде на момент вызова команды.

Обязательный параметр: id заказа.  Например:

api/lite/orders/refresh-reserve?id=1285-1001

В случае получения положительного ответа ("success": true) - нужно повторно загрузить заказ с бэкенда, данные по товарам и резервам могут быть обновлены. 

Пример ответа:

{ 
    "success": true  
}

 

Заказ - обновление резервов массовое

/api/lite/orders/refresh-reserve/batch

Обновление резервов у списка заказов.

В случае неуспеха - в ответе в списке errors будут ошибки обновления. Успешно обновленные резервы при этом сохраняются в системе.

Пример запроса:

{ 
    "orders":["8057-1033", "5678"] 
}        

В ответ возвращается:

{
    "success": true  
}

Ошибка по любому заказу списка: 

{
 
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Ошибка обработки заказа 8057-1033: Ошибка при проведении: Не задан канал доставки для заказа 8057-1033; Не заданы ФИО получателя."
        },
        {
            "code": 0,
            "message": "Заказ 5678 не найден."
        }
    ]
}

 

Заказ - обновление всех резервов

/api/lite/orders/refresh-reserve/all

Обновление резервов у всех заказов, которые зарезервированы не полностью.

Запрос выполняется без параметров.
В ответ будет возвращено кол-во запланированных к обновлению заказов, обработанных без ошибок и полностью зарезервированных.

В ответ возвращается:

{
    "success": true,
    "errors": [
        {
            "code": 0,
            "message": "Заказ 1427 не был полностью зарезервирован"
        },
        {
            "code": 0,
            "message": "Ошибка обработки заказа 8057-1033: Ошибка при проведении: Не задан канал доставки для заказа 8057-1033; Не заданы ФИО получателя."
        }
    ],
    "planned": 3,
    "processed": 2,
    "reserved": 1
}

 

 

Заказы

/api/lite/orders/statuses

Получение сводки по статусам заказов

/api/lite/orders/statuses

Возвращает сводные данные по количеству заказов в различных статусах, а также о количестве проблемных заказов

По умолчанию содержит только сводку без заказов с типом CUSTOM.
Для получения сводки по CUSTOM заказам с нужным подтипом - передать список подтипов в параметре  order_types, аналогично получению заказов в /api/lite/orders?order_types=my_types

Пример ответа:

{
    "success": true,
    "statuses": {
        "ORDER_INFO_DRAFT": 6,
        "ORDER_INFO_NEED_CONFIRM": 1,
        "ORDER_INFO_READY_TO_PACK": 1
    },
    "problemOrders": 0
}
Заказы

/api/lite/orders/packing

Заказ → упаковать

/api/lite/orders/packing

Производит упаковку указанного подтвержденного заказа в одно упакованное место, содержащее все товары заказа, имеющее суммарные массу и объем товаров из данных их упаковок (с небольшой поправкой в сторону увеличения).

Пример запроса:

{ 
"id":"1019" 
}

В ответ возвращается:

{
"success": true

}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ → упаковать массовый

/api/lite/orders/packing/batch

Производит упаковку по списку переданных заказов (все неупакованные), аналогично штучной упаковке /api/lite/orders/packing и возвращает для упакованных заказов общую печатную форму.

Метод можно вызывать повторно для упакованных заказов  - в этом случае упаковка повторно не производится, а только заказ включается в перечень для генерации печатной формы. 

Пример запроса:

{ 
    "orders":["1234", "5678"]  
}

В ответ возвращается:

{
    "success": true,   
    "orders": [
        {
            "id": "1234",
            "success": true,           
            "errors": null
        },
        {
            "id": "5678",
            "success": false,      
            "errors": [
             {
               "code": 0,
               "message": "Текст ошибки"
            }         
        }
    ],
    "content" : "base64data"   // pdf печатной формы упакованных заказов из списка переданных
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ → распаковать

/api/lite/orders/packing

Производит полную распаковку указанного упакованного заказа

Пример запроса:

{ 
"id":"1018" 
}

В ответ возвращается:

{
"success": true

}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Заказы

/api/lite/orders/packing_control

Заказ → контроль упаковки

/api/lite/orders/packing_control

Производит контроль упаковки по ШК, если склад с настройкой контроля упаковки.

 

В успешном ответе будет присутствовать проверенный ШК и номер заказа.

Пример запроса:

{
"id": "202233856366"
}

В ответ возвращается:

{
    "success": true,
    "id": "202228134882",
    "orderId": "8057-1048"
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ → контроль упаковки

/api/lite/orders/packing_control

Возвращает последние проконтролированные упакованные места.

 

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: /api/lite/orders/packing_control?page=0&size=20

Если параметры не переданы, то дефолтные значения page=0&size=20

 

Описание результата запроса

Поле Тип Описание
stickerBarcode string Штрих код
packingControlDate datetime Время проверки упакованного места
orderId string Номер заказа
deliveryCompany string Наименование курьерской службы
receiver Object Объект, описывающий получателя заказа
name string Имя
surname string Фамилия
patronymic string Отчество
fullName string ФИО
phone string Телефон (отформатированный)
rawPhone string Телефон (в чистом виде)
alternativePhone string Альтернативный телефон
email string Почтовый адрес
post string Должность
personType string Тип пользователя

 

Пример ответа:

{ 
    "success": true,
    "recordsTotal": 8,
    "takeOutPackings": [
        {
            "stickerBarcode": "202233856366",
            "packingControlDate": "2020-05-08 20:38:08.353",
            "orderId": "3248-1005",
            "deliveryCompany": "PickPoint",
            "receiver": {
                "name": "Петр",
                "surname": "толстой",
                "patronymic": "",
                "fullName": "Толстой Петр",
                "phone": "89011111111",
                "rawPhone": "89011111111",
                "alternativePhone": "",
                "email": "petr@petr.net",
                "post": null,
                "personType": "CUSTOMER"
            }
        },
        ...
    ]
}

 

Заказы

/api/lite/orders/tag

Заказ → установить метку на заказе

/api/lite/orders/tag

Пример запроса:

{
  "id": "1000",
  "tagId": "1001"
}

Успех:

{
  "success": true
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Метки с указанным id не существует"
    }
  ]
}

 

Заказ → снять метку с заказа

/api/lite/order/tag

Снимает метку с заказа.

Запрос:

{
  "id": "1000",
  "tagId": "1001"
}

Успешный ответ:

{
  "success": true
}
Заказы

/api/lite/orders/calc_insurance_sum

Расчет страховой стоимости заказа

/api/lite/orders/calc_insurance_sum

Расчет страховой стоимости заказа исходяиз переданных товаров и с учетом настроек процента страховой суммы на данный канал доставки.

Заказ анализируется только из переданных данных, без поиска заказа в БД.

В качестве dto используется dto заказа из /orders.

Пример запроса:

{
              
          "totalOrderSum": 15,
          "paymentStatus": "NOT_PAID",
          "confirmStatus": "NEED_CONFIRM",
          "paymentMethodCode": "cod-cash",
          "paymentMethodType": "COD_CASH",
          "needCustomerPayment": false,
          "tags": [],
          "delivery": {
              "code": "1a625a2c-c121-617c-23b9-5bbfbfb22eec",
              "type": "PVZ",
              "title": "PickPoint",
              "pickupPointId": "3",
              "logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
              "trackingNumber": null,
              "trackingURL": null,
              "desiredDeliveryDate": null,
              "desiredDeliveryTimeFrom": "09:00",
              "desiredDeliveryTimeTo": "18:00",
              "deliveryComment": null,
              "address": {
                  "country": "Россия",
                  "countryCode": "RU",
                  "region": "Москва",
                  "area": null,
                  "city": "Москва",
                  "settlement": null,
                  "street": "ул Озёрная",
                  "house": "33",
                  "block": "",
                  "building": "",
                  "flat": null,
                  "fullAddress": "119361, г Москва, ул Озёрная, д 33",
                  "fullCity": null,
                  "rawData": null,
                  "zip": "119361",
                  "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                  "areaFias": null,
                  "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                  "settlementFias": null
              },
              "receiver": {
                  "name": "Валерьевна",
                  "surname": "Ирина",
                  "patronymic": null,
                  "fullName": "Ирина Валерьевна",
                  "phone": "89011111111",
                  "rawPhone": null,
                  "alternativePhone": "",
                  "email": "i-fomina@yandedx.ru",
                  "post": null,
                  "personType": "CUSTOMER"
              },
              "deliveryServices": []
          },
          "legalEntity": {
              "id": "3c0a3ad3-b10f-4299-5b1b-a3d90b0c198a",
              "type": "PERSON",
              "name": " Розничный покупатель",
              "organization": null,
              "person": null
          },
          "items": [
              {
                  "num": 1,
                  "variantId": "delivery",
                  "name": "Доставка",
                  "quantity": 1,
                  "vatRate": "NO_VAT",
                  "price": 0,
                  "skuType": "SERVICE"
              },
              {
                  "num": 2,
                  "variantId": "BR00T-000116",
                  "productId": "BR00T-000116",
                  "productExtId": "BR00T-000116",
                  "name": "Набор для Бро №3: помада для волос, гель для душа + шампунь",
                  "article": "BR00T-000116",
                  "quantity": 5,
                  "quantityAvailable": 38,
                  "vatRate": "NO_VAT",
                  "price": 30,
                  "img": "https://storage.yandexcloud.net/images-k2c/90960e52-86cf-4342-9ecc-497bb91f0af0.jpg",
                  "itemAmountState": {
                      "amountORDERED": 5,
                      "amountRESERVED": 5,
                      "amountPACKED": 0,
                      "amountSHIPPED": 0,
                      "amountDELIVERED": 0,
                      "amountLOST": 0,
                      "amountFACT_DELIVERED": 0,
                      "amountRETURNED": 0
                  },
                  "skuType": "SKU",    
                  "itemDimensions": {
                      "height": 20,
                      "width": 20,
                      "depth": 10
                  },
                  "itemWeight": 500
              },
              {
                  "num": 3,
                  "variantId": "BR00T-000133",
                  "productId": "BR00T-000133",
                  "productExtId": "BR00T-000133",
                  "name": "Брелок для ключей/рюкзака Bro Cosmetics Crew",
                  "article": "BR00T-000133",
                  "quantity": 22,
                  "quantityAvailable": 1,
                  "vatRate": "NO_VAT",
                  "price": 15,
                  "img": "https://storage.yandexcloud.net/images-k2c/b99569d2-be64-4a41-9cfa-e9eb5c339485.jpg",
                  "itemAmountState": {
                      "amountORDERED": 22,
                      "amountRESERVED": 22,
                      "amountPACKED": 0,
                      "amountSHIPPED": 0,
                      "amountDELIVERED": 0,
                      "amountLOST": 0,
                      "amountFACT_DELIVERED": 0,
                      "amountRETURNED": 0
                  },
                  "skuType": "SKU",
                  "itemDimensions": {
                      "height": 2,
                      "width": 1,
                      "depth": 1
                  },
                  "itemWeight": 50
              }
          ],
          "expenses": [],
          "customerPaymentInProcess": false,
          "warehouseName": "Tempoline",
          "warehouseCode": "6805bc64-270f-ae7d-1231-773ff181e446",
          "c": "4f794476-a895-897d-d4a4-119924305917"
      }

В ответ возвращается

Успех:

{
    "success": true,
    "insuranceSum": 240.2
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Заказы

/api/lite/tag

Создание/редактирование/удаление метки

Для создания / редактирования

/api/lite/tag

Для создания или редактирования метки, выполняется следующий POST запрос.

Пример запроса:

{ 
    "id": "идентификатор метки",
    "name": "На производстве",
    "color_id": "color1"
   
}

Если id не указан, тогда выполняется создание новой метки, если id указан – метка обновляется.

В ответ возвращается результат операции и id созданной/отредактированной метки.

Пример успешного ответа:

{
  "success": true,
  "id": "1000"
}

В случае ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Метки с указанным id не существует"
    }
  ]
}

Для удаления:

/api/lite/tag

Для удаления метки, выполняется следующий POST запрос с указанием идентификатора метки.

Пример запроса:

{ 
   "id": "1000" 
}

В ответ возвращается результат операции и id удаленной метки.

Пример успешного ответа:

{
  "success": true,
  "id": "1000"
}

В случае ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Метки с указанным id не существует"
    }
  ]
}

Получение списка меток 

/api/lite/tag

В ответ возвращается список всех созданных меток, а также набор доступных цветов для меток.

Пример запроса:

{
  "tags": [
    {
      "id": "1000",
      "name": "В производстве",
      "color": "color1"
    },
    {
      "id": "1001",
      "name": "VIP",
      "color": "color2"
    }
  ],
  "colors": [
    {
      "id": "color1",
      "code": "#FF0000"
    },
    {
      "id": "color2",
      "code": "#FFDD00"
    }
  ]
}
Заказы

/api/lite/report/order

XLS Отчёт по заказам

/api/lite/report/order

Возвращает отчёт по всем заказам в формате XLS.

По умолчанию, если доп. параметры не переданы, возвращает список ВСЕХ заказов за всё время.

Для запроса списка заказов за определённый интервал, необходимо передать доп. параметры:

from=yyyy-MM-ddTHH:mm:ss и to=yyyy-MM-ddTHH:mm:ss

Пример запроса: 

/api/lite/report/order?from=2019-10-29T12:00:45&to=2019-10-31T11:02:37

Положительный результат запроса: 

{
    "success": true,
    "fileName": "OrderReport(17233597)13556330559279078228.xls",
    "content": "0M8R4K(...)AAAAAAAAAAAAAAAAAAAAAA==" //Файл в формате excel, закодированный в BASE64 строке
}

Отрицательный результат запроса:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Заказы

/api/lite/pub/orders

Создание заказа для виджета

/api/lite/pub/orders

(метод требует авторизации по домену)

Создание заказа для корзины и других клиентов по АПИ

Создает новый заказ в системе Кактус.

Цены задавать нельзя, они подставятся в бэкенде из актуальных

Доставка перерасчитается в бэкенде по указанным данным заказа


Пример запроса:

{
  "comment": "",
  "paymentMethodCode": "cod-cash",
  "orderTag": "tag1",
  "totalOrderSum": 5490,
  "delivery": {
    "code": "PICKPOINT",
    "pickupPointId": "2201-001",
    "desiredDeliveryDate": "2020-02-14",
    "desiredDeliveryTimeFrom": "09:00",
    "desiredDeliveryTimeTo": "20:00",
    "deliveryComment": "Поскорее",
    "receiver": {
      "name": "петр",
      "surname": "толстой",
      "patronymic": "",
      "fullName": "",
      "phone": "89011111111",
      "alternativePhone": "",
      "email": "petr@petr.net"
    },
    "address": {
    "region": "Алтайский",
    "area": null,
    "city": "Барнаул",
    "settlement": null,
    "street": "Барнаульская",
    "house": "1",
    "block": "",
    "building": "",
    "flat": "",
    "fullAddress": "",
    "zip": "",
    "regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
    "areaFias": null,
    "cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
    "settlementFias": null,
    "country": "RU"
    }
  },
  "items": [
    {
      "num": 1,
      "variantId": "1001", 
      "variantExtId": null,     
      "quantity": 1,
      "bundleOptionalVariants": [
        "1012"
      ]
    },
    {
      "num": 2,
      "variantId": "delivery",
      "variantExtId": null
    }
  ],
  "promocode":null,
  "customData":"some data",
  "urlParams":[
  {
    "name":"name1",
    "value":"value1"
  }
 ],
  "deliveryServiceOptions": {
        "PICKPOINT_DELIVERY": "TRYING;PARTIAL_DELIVERY"
   },
  "consentToNewsletter": true
}

В ответ возвращается:

{
    "success": true,
    "orderId": "1285-1002",
    "c": "2b92b631-7f1b-c52a-897e-30bc628f87e5"
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Запрос списка заказов

/api/lite/pub/orders

Метод возвращает запрошенный заказ по его номеру (id) и проверочному коду (с)

Пример запроса: api/lite/pub/orders?id=7277-1002&c=f300ae30-507c-2d36-d37c-e6397084b6e2

Описание полей смотреть для метода:

/api/lite/orders

Примечание: Возвращается неполный список полей по сравнению с GET /api/lite/orders.

 

Пример результата запроса:

{
    "success": true,
    "orders": [
        {
            "id": "7277-1002",
            "date": "2020-01-22 16:37:56",
            "updateTs": "2020-01-22 16:37:57.528",
            "status": "ORDER_INFO_DRAFT",
            "totalOrderSum": 999,
            "paymentStatus": "NOT_PAID",
            "paymentMethodCode": "online",
            "needCustomerPayment": false,
            "comment": "",
            "delivery": {
                "code": "PICKPOINT",
                "type": "PVZ",
                "title": "PickPoint",
                "pickupPointId": "12345",
                "logoUrl": null,
                "trackingNumber": null,
                "trackingURL": null,
                "desiredDeliveryDate": "2020-02-14",
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "20:00",
                "deliveryComment": "Поскорее",
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Алтайский",
                    "area": null,
                    "city": "Барнаул",
                    "settlement": null,
                    "street": "",
                    "house": "",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Алтайский, Барнаул",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "",
                    "regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
                    "areaFias": null,
                    "cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
                    "settlementFias": null
                },
                "receiver": {
                    "name": "Петр",
                    "surname": "толстой",
                    "patronymic": "",
                    "phone": "89011111111",
                    "alternativePhone": "",
                    "email": "petr@petr.net",
                    "post": null,
                    "personType": null
                }
            },
            "items": [
                {
                    "num": 1,
                    "productId": "1001",
                    "productExtId": null,
                    "variantId": "1001",
                    "variantExtId": null,                   
                    "name": "Кактус Цереус",
                    "quantity": 1,
                    "price": 999,
                    "img": "https://img.kak2c.ru/i/j/j/tYqAVdh1_c.jpg?1579689505",
                    "skuType": "SKU"
                },
                {
                    "num": 2,
                    "productId": null,
                    "variantId": "delivery",
                    "name": "Доставка",
                    "quantity": 1,
                    "price": 0,
                    "skuType": "SERVICE"
                }
            ],
            "customerPaymentInProcess": false,
          	"shopUrl": "https://shop6750043.kak2c.ru",
            "c": "f300ae30-507c-2d36-d37c-e6397084b6e2"
        }
    ]
}

Ошибка:

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Расчет скидки по заказу

/api/lite/pub/orders/discount

Запрос расчета скидки по заказу, по указанному промокоду. Структура запроса такая же как в создании заказа.

Пример запроса:

{
  "comment": "",
  "paymentMethodCode": "online",
  "totalOrderSum": 5490,
  "delivery": {
    "сode": "PICKPOINT",
    "pickupPointId": "12345",
    "desiredDeliveryDate": "22.02.2020",
    "desiredDeliveryTimeFrom": "09:00",
    "desiredDeliveryTimeTo": "20:00",
    "deliveryComment": "Поскорее",
    "receiver": {
      "name": "петр",
      "surname": "толстой",
      "patronymic": "",
      "fullName": "",
      "phone": "23232323",
      "alternativePhone": "",
      "email": "petr@petr.net"
    },
    "address": {
    "region": "Алтайский",
    "area": null,
    "city": "Барнаул",
    "settlement": null,
    "street": "",
    "house": "",
    "block": "",
    "building": "",
    "flat": "",
    "fullAddress": "",
    "zip": "",
    "regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
    "areaFias": null,
    "cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
    "settlementFias": null,
    "country": "RU"
    }
  },
  "items": [
    {
      "num": 1,
      "variantId": "1001",
      "productId":"1001",
      "quantity": 1
    },
    {
      "num": 2,
      "variantId": "delivery",
      "productId":"delivery"
    }
  ],
  "promocode":"PROMO",
  "customData":"some data",
  "urlParams":[
  {
    "name":"name1",
    "value":"value1"
  }
 ],
  "deliveryServiceOptions": {
        "PICKPOINT_DELIVERY": "TRYING;PARTIAL_DELIVERY"
   }
}

В ответ возвращается:

{
    "success": true,
    "discounts": [
        {
            "discountValue": 123.45,
            "deliveryDiscountValue": 123.45,
            "discountType": "PROMOCODE"  // PAYMENT_TYPE
        }
    ]
   
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Проверка промокодов

/api/lite/pub/promocode/conditions/check

Для валидации условий промокода, необходимо передать весь заказ целиком, с заполненным промокодом (аналогично /api/lite/pub/orders)

Пример запроса:

{
  "comment": "",
  "paymentMethodCode": "online",
  "totalOrderSum": 5490,
  "delivery": {
    "сode": "PICKPOINT",
    "pickupPointId": "12345",
    "desiredDeliveryDate": "22.02.2020",
    "desiredDeliveryTimeFrom": "09:00",
    "desiredDeliveryTimeTo": "20:00",
    "deliveryComment": "Поскорее",
    "receiver": {
      "name": "петр",
      "surname": "толстой",
      "patronymic": "",
      "fullName": "",
      "phone": "23232323",
      "alternativePhone": "",
      "email": "petr@petr.net"
    },
    "address": {
    "region": "Алтайский",
    "area": null,
    "city": "Барнаул",
    "settlement": null,
    "street": "",
    "house": "",
    "block": "",
    "building": "",
    "flat": "",
    "fullAddress": "",
    "zip": "",
    "regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
    "areaFias": null,
    "cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
    "settlementFias": null,
    "country": "RU"
    }
  },
  "items": [
    {
      "num": 1,
      "variantId": "1001",
      "productId":"1001",
      "quantity": 1
    },
    {
      "num": 2,
      "variantId": "delivery",
      "productId":"delivery"
    }
  ],
  "promocode":"TEST",
  "customData":"some data",
  "urlParams":[
  {
    "name":"name1",
    "value":"value1"
  }
 ],
  "deliveryServiceOptions": {
        "PICKPOINT_DELIVERY": "TRYING;PARTIAL_DELIVERY"
   }
}

Результат запроса: 

{
   "success":true,
   "code":"code",
   "isActive":true,
   "discountType":"FIX",
   "discountValue":836,
   "hasConditions":true,
   "deliveryDiscountValue":50, //Скидка на доставку в %
   "bonusSkus":[
    {

      "productId":"123",

      "variantId":"456",

      "quantity": 2
    }  
   ]
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Заказы

/api/lite/pub/order-discount

Запросить размер скидок по заказу (публичный) -(V1)

(метод требует авторизации по домену)

Проверка переданного промокода на активность

/api/lite/pub/order-discount

По отправленным данным заказа (с опциональным указанием промокода) - возвращает размер скидки в рублях для чекаута.

Формат передаваемых данных всегда аналогичен dto заказа в методе создания заказа (публичный):

/api/lite/pub/order

Пример запроса: 

{
  "comment": "",
  "confirmStatus": "APPROVED",
  "paymentStatus": "NOT_PAID",
  "paymentMethodCode": "cod-card",
  "totalOrderSum": "1330.00",
  "promocode":"testPercent",
  "delivery": {
    "receiver": {
      "name": "тест4",
      "phone": "9151321211",
      "alternativePhone": "",
      "email": ""
    },
    "deliveryCode": "GLOBAL_DELIVERY",
    "timeFrom": "09:00",
    "timeTo": "20:00",
    "desiredDeliveryDate": null,
    "deliveryComment": "",
    "address": {
      "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "areaFias": null,
      "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "settlementFias": null,
      "country": "RU",
      "region": "Москва",
      "area": null,
      "city": "Москва",
      "settlement": null,
      "street": "",
      "house": "",
      "block": "",
      "building": "",
      "flat": "",
      "fullAddress": "",
      "zip": ""
    },
    "pickupPointId": ""
     
  },
  "items": [
    {
      "num": 1,
      "id": "1001",
      "quantity": 3,
      "variants": [
         
      ]
    },
     {
      "num": 2,
      "id": "1002",
      "quantity": 2,
      "variants": [
         
      ]
    },
    {
      "num": 3,
      "id": "delivery"
    }
  ]
}

Положительный результат запроса: 

{
    "success": true,
    "discounts": [
        {
            "discountType": "PROMOCODE", //   PROMOCODE | PAYMENT_TYPE
            "discountValue": 123.45,
            "deliveryDiscountValue" : 50 //Скидка на доставку в %
        },
        {
            "discountType": "PAYMENT_TYPE", //   PROMOCODE | PAYMENT_TYPE
            "discountValue": 20
        }
    ]   
}
Заказы

/api/lite/pub/payment

Оплата заказа покупателем

/api/lite/pub/payment?orderId=humanId

Параметр: humanId заказа покупателя.

В ответе данные для формирования html-формы отсылки на оплату.

Ответ:

{
    "success": true,
    "errors": [],
    "redirectData": {
        "data": {
            "entries": [
                {
                    "num": 0,
                    "name": "MERCHANT",
                    "value": "kaktwocr"
                },
                {
                    "num": 1,
                    "name": "ORDER_REF",
                    "value": "25567175-8d84-e371-90fa-8a6e86a69aa4"
                },
                {
                    "num": 2,
                    "name": "ORDER_DATE",
                    "value": "2019-03-11 17:09:35"
                },
                {
                    "num": 3,
                    "name": "ORDER_PNAME[]",
                    "value": "Пополнение баланса аккаунта №6419855"
                },
                {
                    "num": 4,
                    "name": "ORDER_PCODE[]",
                    "value": "balance"
                },
                {
                    "num": 5,
                    "name": "ORDER_PRICE[]",
                    "value": "222.00"
                },
                {
                    "num": 6,
                    "name": "ORDER_QTY[]",
                    "value": "1"
                },
                {
                    "num": 7,
                    "name": "ORDER_VAT[]",
                    "value": "0"
                },
                {
                    "num": 8,
                    "name": "PRICES_CURRENCY",
                    "value": "RUB"
                },
                {
                    "num": 9,
                    "name": "DESTINATION_CITY",
                    "value": ""
                },
                {
                    "num": 10,
                    "name": "DESTINATION_STATE",
                    "value": ""
                },
                {
                    "num": 11,
                    "name": "DESTINATION_COUNTRY",
                    "value": ""
                },
                {
                    "num": 12,
                    "name": "PAY_METHOD",
                    "value": "CCVISAMC"
                },
                {
                    "num": 13,
                    "name": "ORDER_PRICE_TYPE[]",
                    "value": "GROSS"
                },
                {
                    "num": 14,
                    "name": "ORDER_HASH",
                    "value": "6fe466d056fcc82836a861c322070381"
                },
                {
                    "num": 15,
                    "name": "BILL_FNAME",
                    "value": "Петр"
                },
                {
                    "num": 16,
                    "name": "BILL_LNAME",
                    "value": "Петров"
                },
                {
                    "num": 17,
                    "name": "BILL_EMAIL",
                    "value": "abc3@abc.ru"
                },
                {
                    "num": 18,
                    "name": "BILL_PHONE",
                    "value": "111111"
                },
                {
                    "num": 19,
                    "name": "BILL_COUNTRYCODE",
                    "value": "RU"
                },
                {
                    "num": 20,
                    "name": "BACK_REF",
                    "value": ""
                },
                {
                    "num": 21,
                    "name": "LANGUAGE",
                    "value": "RU"
                },
                {
                    "num": 22,
                    "name": "CURRENCY",
                    "value": "RUB"
                }
            ],
            "url": "https://sandbox.payu.ru/order/lu.php"
        },
        "paymentProvider": "PAYU"
    }
}

 

Заказы

/api/lite/pub/orders/discount

Запросить размер скидок по заказу (публичный)

 

/api/lite/pub/orders/discount

По отправленным данным заказа (с опциональным указанием промокода) - возвращает размер скидки в рублях для чекаута.

Формат передаваемых данных всегда аналогичен dto заказа в методе создания заказа (публичный):

/api/lite/pub/orders

Пример запроса: 

{
  	"promocode":"testPercent",
    "comment": "",
    "confirmStatus": "APPROVED",
    "delivery": {
        "address": {
            "area": null,
            "areaFias": null,
            "block": "",
            "building": "",
            "city": "Урюпинск",
            "cityFias": "2e5879fc-35c2-4354-816b-f1fce74ece87",
            "country": "RU",
            "flat": "",
            "fullAddress": "",
            "house": "",
            "region": "Волгоградская",
            "regionFias": "da051ec8-da2e-4a66-b542-473b8d221ab4",
            "settlement": null,
            "settlementFias": null,
            "street": "",
            "zip": ""
        },
        "code": "bb60d72c-2a25-11e9-8989-002590923634",
        "deliveryComment": "",
        "desiredDeliveryDate": null,
        "pickupPointId": "",
        "receiver": {
            "alternativePhone": "",
            "email": "",
            "name": "",
            "phone": ""
        },
        "timeFrom": "09:00",
        "timeTo": "20:00"
    },
    "forOrderDiscount": true,
    "items": [
        {
            "num": 1,
            "productId": "BR00T-000132",
            "quantity": 1,
            "variantId": "BR00T-000132"
        }
    ],
    "paymentMethodCode": "disk1",
    "paymentStatus": "NOT_PAID",
    "totalOrderSum": 690
}

Положительный результат запроса: 

{
    "success": true,
    "discounts": [
      	{
            "discountValue": 2813.00, //общая применяемая скидка
            "orderSumDiscountValue": 1541.00, //скидка на итоговую сумму заказа (общая сумма заказа за вычетом потоварной скидки)(discountValue - skusDiscountValue)
            "skusDiscountValue": 1272.00, //Суммарная потоварная скидка
            "deliveryDiscountValue": 50, //Скидка на доставку в %
            "discountType": "PROMOCODE", //   PROMOCODE | PAYMENT_TYPE
            "discountFormula": "250.00 * 2 + (636.00 - 636.00) * 2 + 1030.00 + 636.00 * 2 - 1000 - (20% + 10%) = 1261", //формула расчёта скидки на сумму заказа
            "promocodeSkuDiscounts": [ //потоварные скидки
                {
                    "skuId": "1066", //ID товара
                    "quantity": 2, //Кол-во товара
                    "fixDiscountAmount": 1000, //Суммарная величина фикс скидки на товар
                    "percentDiscountAmount": 0, //Суммарная величина процента скидки на товар
                    "oldPrice": 636.00, //старая цена товара
                    "newPrice": 0, //цена товара после применения скидки
                    "formula": "(636.00 - 636.00) * 2" //формула расчёта скидки на товар
                }
            ]
        }
        {
            "discountType": "PAYMENT_TYPE", //   PROMOCODE | PAYMENT_TYPE
            "discountValue": 20
        }
    ]   
}
Заказы

/api/lite/orders/copy

Копирование заказа

/api/lite/orders/copy

 

Копирует указанный заказ черновиком и возвращает номер созданного заказа

Обязательный параметр: id заказа. Например:

{
    "id": "1001"
}

Формат ответа аналогичен списку заказов

Пример ответа:

{
    "success": true,
    "orderId": "8057-1057",
    "c": "7ed78ba9-310f-e681-756c-71beb95853f6"
}
Заказы

/api/lite/pub/promocode/conditions/check

Запросить проверку применения промокода по заказу (публичный)

 

/api/lite/pub/promocode/conditions/check

По отправленным данным заказа (с обязательным указанием промокода) - возвращает размер скидки в рублях для чекаута, а также возможные промотовары 

Формат передаваемых данных всегда аналогичен dto заказа в методе создания заказа (публичный):

/api/lite/pub/orders

Пример запроса: 

{
  	"promocode":"testFix",
    "comment": "",
    "confirmStatus": "APPROVED",
    "delivery": {
        "address": {
            "area": null,
            "areaFias": null,
            "block": "",
            "building": "",
            "city": "Урюпинск",
            "cityFias": "2e5879fc-35c2-4354-816b-f1fce74ece87",
            "country": "RU",
            "flat": "",
            "fullAddress": "",
            "house": "",
            "region": "Волгоградская",
            "regionFias": "da051ec8-da2e-4a66-b542-473b8d221ab4",
            "settlement": null,
            "settlementFias": null,
            "street": "",
            "zip": ""
        },
        "code": "bb60d72c-2a25-11e9-8989-002590923634",
        "deliveryComment": "",
        "desiredDeliveryDate": null,
        "pickupPointId": "",
        "receiver": {
            "alternativePhone": "",
            "email": "",
            "name": "",
            "phone": ""
        },
        "timeFrom": "09:00",
        "timeTo": "20:00"
    },
    "items": [
        {
            "num": 1,
            "productId": "BR00T-000132",
            "quantity": 1,
            "variantId": "BR00T-000132"
        }
    ],
    "paymentMethodCode": "disk1",
    "paymentStatus": "NOT_PAID",
    "totalOrderSum": 690
}

Положительный результат запроса: 

{
    "success": true,
    "code": "testFix",
    "isActive": true,
    "discountType": "FIX",
    "discountValue": 990,
    "hasConditions": true,
    "deliveryDiscountValue": 0,
    "bonusSkus": {
        "1002": 1
    }
}
Заказы

/api/lite/orders/receiver/address

Заказ → обновление адреса доставки получателю

/api/lite/orders/receiver/address

Возможность обновить только адрес доставки

id - номер заказа

Запрос

{
    "id": "8057-1102",
    "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": "Лубянка",
                    "house": "3",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
                    "fullCity": null,
                    "rawData": "Алтайский, Барнаул, Барнаульская, д 1",
                    "zip": "",
                    "regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
                    "areaFias": null,
                    "cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
                    "settlementFias": null
                }
}

 

Пример успешного ответа

{
    "success": true  
}

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}
Заказы

/api/lite/orders/file

/api/lite/orders/file

Добавляет файл к заказу.

Параметры передаются как form-data:

upfile Файл для загрузки
id Идентификатор заказа (humanId)
print_when_packing Печатать при упаковке
copies_qty Кол-во копий

Пример ответа:

{
    "success": true,
    "id": "b233372d-cf7b-f07b-446b-128912be7c8a",
    "fileType": "JPG",
    "fileName": "IMG_20200822_101244",
  	"fileSource": "USER", //ESHOP | FULFILLMENT
    "fileExt": "jpg",
    "url": "https://storage.yandexcloud.net/order-files-kak2c/d0f03942-8d75-4456-93af-42ec518ef0a9.jpg",
    "printWhenPacking": false,
    "copiesQty": 1
}

 

/api/lite/orders/file

Удаляет файл

В параметре id передается идентификатор файла.

Пример запроса:

DELETE https://app.kak2c.ru/api/lite/orders/file?id=b233372d-cf7b-f07b-446b-128912be7c8a

Пример ответа:

{
  "success": true
}
Заказы

/api/lite/orders/file/edit

/api/lite/orders/file/edit

Пример запроса:

{
    "id": "b9e3efdd-455e-af10-996f-2cf6f03d9775",
    "copiesQty": 2,
    "printWhenPacking": true
}

Пример ответа:

{
    "success": true
}
Заказы

/api/lite/orders/discounts

Применение промокода и скидки

/api/lite/orders/discounts

Позволяет применить или удалить промокод и скидку

Пример запроса

{
    "id": "4249-1647",
    "promocode": "promocode",
    "manualDiscount": {
        "isActive": true,
        "discountType": "PERCENT",   // PERCENT,FIX
        "discountValue": 10
    }
}

 

Успех:

{
    "success": true
}

 

Ошибка:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}
Заказы

/api/lite/orders/email/repeat

Заказ - повторить отправку email покупателю

/api/lite/orders/email/repeat

Отправляет email покупателю о создании заказа.

Параметры - humanId заказа и код "c"

Пример запроса

{  
 "id": "8202-1051",
 "c":"224f9149-a6c3-e408-5193-42cc55fe5749"	
}   

В ответ возвращается

успех:

{
    "success": true  
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Заказы

/api/lite/orders/sync_ff

Заказ - синхронизация с Фулфилмент складом

/api/lite/orders/sync_ff

Выгрузка текущего состояния заказа на склад Фулфилмент (если в заказе проставлен склад такого типа).

 

В случае успеха выполнения - нужно перезакачать данные о заказе.

Пример запроса

{ 
    "id":"1234"  
}        

В ответ возвращается

успех:

{
    "success": true   
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Заказы

/api/lite/orders/delivery

Заказ → обновление данных доставки

/api/lite/orders/delivery

Возможность обновить все данные по доставке заказа

id - номер заказа

Формат аналогичный секции delivery в GET /orders

 

Запрос

{
 
            "id": "8202-1051",
          
            "delivery": {
                "code": "624f1b23-049f-a1aa-ee21-b6b1523a88b1",               
                "pickupPointId": "2201-002",   
                "deliveryComment": "Поскорее",
                "desiredDeliveryDate": "2020-08-13",
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "20:00", 
                "isDeliverySumLimitActive": true,
                "deliverySumLimitAmount": 5000, 
                "deliverySumBelowLimitAmount": 1000,
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Алтайский",
                    "area": null,
                    "city": "Томск",
                    "settlement": null,
                    "street": "Барнаульская",
                    "house": "1",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
                    "fullCity": null,
                    "rawData": "Алтайский, Барнаул, Барнаульская, д 1",
                    "zip": "",
                    "regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
                    "areaFias": null,
                    "cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
                    "settlementFias": null
                },
                "receiver": {
                    "name": "Сергей",
                    "surname": "Сергеев",
                    "patronymic": "",
                    "fullName": "Толстой Петр",
                    "phone": "89011111111",
                    "rawPhone": "89011111111",
                    "alternativePhone": "",
                    "email": "exhila.rate1111111@mail.ru",
                    "post": null,
                    "personType": "CUSTOMER"                  
                },
                "deliveryServices": null,
                "deliveryPayerType": "RECEIVER", // SENDER              
                "isDeliverySumLimitActive": true,
                "deliverySumLimitAmount": 324234,
                "deliverySumBelowLimitAmount": 23432432
            }      
    
}

 

Пример успешного ответа

{
    "success": true  
}

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}
Заказы

/api/lite/orders/comments

Заказ → обновление комментариев

/api/lite/orders/comments

Возможность обновить комментарии по заказу

id - номер заказа

 

 

Запрос

{ 
     "id": "8202-1051",
     "comment": "Комментарий покупателя",
  	 "operatorComment": "Комментарий оператора"  
}

 

Пример успешного ответа

{
    "success": true  
}

В случае ошибки:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}
Заказы

/api/lite/orders/diff_history

Запрос истории состояний заказа

/api/lite/orders/diff_history

На данный момент возвращает только начальное состояние заказа.

Номер заказа передается в параметре order_id.

Пример результата запроса

{
    "success": true,
    "history": [
        {
            "createTs": "2021-01-20 15:03:28.065",
            "component": "ESHOP",
            "diffData": "{\"id\":\"34575570\",\"date\":\"2021-01-20 15:03:08\",\"updateTs\":\"2021-01-20 15:03:25.990\",\"status\":\"ORDER_INFO_DRAFT\",\"totalOrderSum\":215.0,\"insuranceSum\":215.00,\"insuranceSumAutoCalculation\":true,\"paymentStatus\":\"NOT_PAID\",\"confirmStatus\":\"NEED_CONFIRM\",\"paymentMethodCode\":\"cod-card\",\"paymentMethodType\":\"COD_CARD\",\"needCustomerPayment\":false,\"customData\":\"{\\r\\n  \\\"beruDeliveryServiceName\\\" : \\\"DPD\\\",\\r\\n  \\\"beruDeliveryName\\\" : \\\"Самовывоз\\\"\\r\\n}\",\"orderType\":\"STANDARD\",\"delivery\":{\"code\":\"4166d5f0-5449-2827-d4e9-256526cb52f8\",\"type\":\"COURIER\",\"title\":\"BERU\",\"pickupPointId\":null,\"logoUrl\":\"https://storage.yandexcloud.net/lk-kak2c/delivery_beru_left.svg\",\"trackingNumber\":null,\"trackingURL\":null,\"desiredDeliveryDate\":null,\"desiredDeliveryTimeFrom\":\"09:00\",\"desiredDeliveryTimeTo\":\"18:00\",\"actualDeliveryDate\":null,\"pvzComment\":null,\"deliveryComment\":null,\"address\":{\"country\":null,\"countryCode\":null,\"region\":\"Москва\",\"area\":null,\"city\":\"Москва\",\"settlement\":null,\"street\":null,\"house\":null,\"block\":null,\"building\":null,\"flat\":null,\"fullAddress\":\"Москва\",\"fullCity\":null,\"rawData\":null,\"zip\":null,\"regionFias\":null,\"areaFias\":null,\"cityFias\":null,\"settlementFias\":null},\"receiver\":{\"name\":\"Покупатель на Беру\",\"surname\":null,\"patronymic\":null,\"phone\":\"+70000000000\",\"rawPhone\":\"+70000000000\",\"alternativePhone\":\"\",\"email\":null,\"post\":null,\"personType\":\"CUSTOMER\",\"address\":{\"country\":null,\"countryCode\":null,\"region\":\"Москва\",\"area\":null,\"city\":\"Москва\",\"settlement\":null,\"street\":null,\"house\":null,\"block\":null,\"building\":null,\"flat\":null,\"fullAddress\":\"Москва\",\"fullCity\":null,\"rawData\":null,\"zip\":null,\"regionFias\":null,\"areaFias\":null,\"cityFias\":null,\"settlementFias\":null}},\"deliveryServices\":null},\"legalEntity\":{\"id\":\"2446fe8b-4f98-dd1a-c7a4-757dafa9c8cb\",\"type\":\"PERSON\",\"role\":null,\"name\":\" Розничный покупатель\",\"organization\":null,\"person\":null},\"items\":[{\"num\":1,\"variantId\":\"1110\",\"variantExtId\":\"ЦБ-00035890\",\"productId\":\"1109\",\"productVariantCount\":1,\"name\":\"AVON Naturals \\\"Цветущая сакура\\\" Спрей для тела, 100мл\",\"article\":\"ЦБ-00035890\",\"quantity\":1,\"quantityAvailable\":1,\"vatRate\":\"NO_VAT\",\"vatSkuProduct\":\"NO_VAT\",\"price\":215.0,\"img\":\"https://storage.yandexcloud.net/images-k2c/6dcbbe98-da4a-4de3-9f99-91b9d1399f84.jpg\",\"itemAmountState\":{\"amountORDERED\":0,\"amountRESERVED\":0,\"amountPACKED\":0,\"amountSHIPPED\":0,\"amountDELIVERED\":0,\"amountLOST\":0,\"amountRETURNED\":0,\"amountRETURNED_DEFECTIVE\":0},\"skuType\":\"SKU\",\"itemDimensions\":{\"height\":15,\"width\":3,\"depth\":3},\"itemWeight\":107,\"barcode\":\"5050136478292\"},{\"num\":2,\"variantId\":\"delivery\",\"name\":\"Доставка\",\"quantity\":1,\"vatRate\":\"NO_VAT\",\"price\":0.0,\"skuType\":\"SERVICE\",\"barcode\":\"\"}],\"expenses\":[],\"files\":[],\"customerPaymentInProcess\":false,\"warehouseName\":\"Tempoline\",\"warehouseCode\":\"6864ba99-f13c-87c0-3f67-f4c7889718a5\",\"warehouseFFExported\":false,\"warehouseFFSync\":false,\"warehouseFFExportError\":false,\"permissionList\":{\"fieldPermissions\":[{\"type\":\"ITEMS_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"PAYMENT_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"IS_PAID_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"RECEIVER_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"DELIVERY_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"WAREHOUSE_EDITABLE\",\"value\":true,\"reason\":null},{\"type\":\"COMMENTS_EDITABLE\",\"value\":true,\"reason\":null}],\"actionPermissions\":[{\"type\":\"CANCEL\",\"value\":true,\"reason\":null},{\"type\":\"CONFIRM\",\"value\":true,\"reason\":null},{\"type\":\"NEED_CONFIRM\",\"value\":true,\"reason\":null},{\"type\":\"PACK\",\"value\":true,\"reason\":null},{\"type\":\"COPY\",\"value\":true,\"reason\":null},{\"type\":\"PACK_CONTROL\",\"value\":true,\"reason\":null},{\"type\":\"UNPACK\",\"value\":true,\"reason\":null},{\"type\":\"SHIPPING\",\"value\":true,\"reason\":null},{\"type\":\"UNSHIPPING\",\"value\":true,\"reason\":null},{\"type\":\"REFRESH_RESERVE\",\"value\":true,\"reason\":null},{\"type\":\"RETURN_TO_DELIVERY\",\"value\":true,\"reason\":null},{\"type\":\"REVERT_RETURNS\",\"value\":true,\"reason\":null},{\"type\":\"DELIVER_SELF_PICKUP\",\"value\":true,\"reason\":null},{\"type\":\"DELIVER_COURIER\",\"value\":true,\"reason\":null},{\"type\":\"ACCEPT_RETURN\",\"value\":true,\"reason\":null}]},\"currency\":\"RUB\",\"summaryItemAmountState\":{\"amountORDERED\":0,\"amountRESERVED\":0,\"amountPACKED\":0,\"amountSHIPPED\":0,\"amountDELIVERED\":0,\"amountLOST\":0,\"amountRETURNED\":0,\"amountRETURNED_DEFECTIVE\":0},\"c\":\"5eee7ab1-70c4-1d31-4b21-90df1c522c00\"}"
        }
    ]
}
Заказы

/api/lite/orders/packing_export

Выгрузка файла для загрузки ШК Wildberries по схеме FBW

/api/lite/orders/packing_export

Возвращает файл с текущими ШК мест в заказе.

Формат файла соответствует необходимому для загрузки методом /api/lite/orders/add_wb_barcodes

Номер заказа передается в параметре id.

Положительный результат запроса: 

{
    "success": true,
    "fileName": "packings_1234-1234.xls",
    "content": "0M8R4K(...)AAAAAAAAAAAAAAAAAAAAAA==" //Файл в формате excel, закодированный в BASE64 строке
}

Отрицательный результат запроса:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Заказы

/api/lite/orders/add_wb_barcodes

Загрузка файла с ШК Wildberries по схеме FBW

/api/lite/orders/add_wb_barcodes

Заменяет текущие ШК на ШК от Wildberries.

Параметры передаются в формате form-data

order_id Идентификатор заказа
file Файл с ШК от Wildberries

Положительный результат запроса: 

{
    "success": true
}

Отрицательный результат запроса:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Заказы

Комментарии по анализу возвратов от фулфилмента

Заказы

/api/lite/pub/save_dadata_address

Сохранить сырой адрес, возвращаемый из dadata

/api/lite/pub/save_dadata_address

(метод требует авторизации по домену)

Пример запроса:

{
  "address_id": "1d729d23-0778-3399-36a6-e10cb53e0ab9", //необязательный параметр. Если такой ид уже есть, адрес обновляется. Если нет - создаётся новый
  "address": "{\"value\":\"г Москва, Варшавское шоссе, д 18 к 1\",\"unrestricted_value\":\"117105, г Москва, Донской р-н, Варшавское шоссе, д 18 к 1\",\"data\":{\"postal_code\":\"117105\",\"country\":\"Россия\",\"country_iso_code\":\"RU\",\"federal_district\":\"Центральный\",\"region_fias_id\":\"0c5b2444-70a0-4932-980c-b4dc0d3f02b5\",\"region_kladr_id\":\"7700000000000\",\"region_iso_code\":\"RU-MOW\",\"region_with_type\":\"г Москва\",\"region_type\":\"г\",\"region_type_full\":\"город\",\"region\":\"Москва\",\"area_fias_id\":null,\"area_kladr_id\":null,\"area_with_type\":null,\"area_type\":null,\"area_type_full\":null,\"area\":null,\"city_fias_id\":\"0c5b2444-70a0-4932-980c-b4dc0d3f02b5\",\"city_kladr_id\":\"7700000000000\",\"city_with_type\":\"г Москва\",\"city_type\":\"г\",\"city_type_full\":\"город\",\"city\":\"Москва\",\"city_area\":\"Южный\",\"city_district_fias_id\":null,\"city_district_kladr_id\":null,\"city_district_with_type\":\"Донской р-н\",\"city_district_type\":\"р-н\",\"city_district_type_full\":\"район\",\"city_district\":\"Донской\",\"settlement_fias_id\":null,\"settlement_kladr_id\":null,\"settlement_with_type\":null,\"settlement_type\":null,\"settlement_type_full\":null,\"settlement\":null,\"street_fias_id\":\"8fc06b0b-5de3-4a72-9e6f-9e0647a37a66\",\"street_kladr_id\":\"77000000000047600\",\"street_with_type\":\"Варшавское шоссе\",\"street_type\":\"ш\",\"street_type_full\":\"шоссе\",\"street\":\"Варшавское\",\"house_fias_id\":\"a41c0f52-7874-4b08-9f91-1067b87ddc6b\",\"house_kladr_id\":\"7700000000004760341\",\"house_cadnum\":null,\"house_type\":\"д\",\"house_type_full\":\"дом\",\"house\":\"18\",\"block_type\":\"к\",\"block_type_full\":\"корпус\",\"block\":\"1\",\"entrance\":null,\"floor\":null,\"flat_fias_id\":null,\"flat_cadnum\":null,\"flat_type\":null,\"flat_type_full\":null,\"flat\":null,\"flat_area\":null,\"square_meter_price\":\"194999\",\"flat_price\":null,\"postal_box\":null,\"fias_id\":\"a41c0f52-7874-4b08-9f91-1067b87ddc6b\",\"fias_code\":\"77000000000000004760341\",\"fias_level\":\"8\",\"fias_actuality_state\":\"0\",\"kladr_id\":\"7700000000004760341\",\"geoname_id\":\"524894\",\"capital_marker\":\"0\",\"okato\":\"45296561000\",\"oktmo\":\"45915000\",\"tax_office\":\"7726\",\"tax_office_legal\":\"7726\",\"timezone\":\"UTC+3\",\"geo_lat\":\"55.691963\",\"geo_lon\":\"37.620833\",\"beltway_hit\":\"IN_MKAD\",\"beltway_distance\":null,\"metro\":[{\"name\":\"Верхние Котлы\",\"line\":\"МЦК\",\"distance\":0.2},{\"name\":\"Крымская\",\"line\":\"МЦК\",\"distance\":1.0},{\"name\":\"Нагатинская\",\"line\":\"Серпуховско-Тимирязевская\",\"distance\":1.1}],\"qc_geo\":\"0\",\"qc_complete\":null,\"qc_house\":null,\"history_values\":null,\"unparsed_parts\":null,\"source\":null,\"qc\":null}}"
}

Успех:

{
    "address_id": "1d729d23-0778-3399-36a6-e10cb53e0ab9",
    "success": true
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Текст ошибки"
    }
  ]
}
Заказы

/api/lite/bitrix/address

Получить сырой адрес, сохранённый из dadata

/api/lite/bitrix/address

параметр id - идентификатор ранее сохранённого адреса в методе /api/lite/pub/save_dadata_address

пример: /lite/bitrix/address?id=f20da5a8-12eb-315d-684c-85c65aa5a713

Успех:

{
    "address": "{\"value\":\"г Москва, Варшавское шоссе, д 18 к 1\",\"unrestricted_value\":\"117105, г Москва, Донской р-н, Варшавское шоссе, д 18 к 1\",\"data\":{\"postal_code\":\"117105\",\"country\":\"Россия\",\"country_iso_code\":\"RU\",\"federal_district\":\"Центральный\",\"region_fias_id\":\"0c5b2444-70a0-4932-980c-b4dc0d3f02b5\",\"region_kladr_id\":\"7700000000000\",\"region_iso_code\":\"RU-MOW\",\"region_with_type\":\"г Москва\",\"region_type\":\"г\",\"region_type_full\":\"город\",\"region\":\"Москва\",\"area_fias_id\":null,\"area_kladr_id\":null,\"area_with_type\":null,\"area_type\":null,\"area_type_full\":null,\"area\":null,\"city_fias_id\":\"0c5b2444-70a0-4932-980c-b4dc0d3f02b5\",\"city_kladr_id\":\"7700000000000\",\"city_with_type\":\"г Москва\",\"city_type\":\"г\",\"city_type_full\":\"город\",\"city\":\"Москва\",\"city_area\":\"Южный\",\"city_district_fias_id\":null,\"city_district_kladr_id\":null,\"city_district_with_type\":\"Донской р-н\",\"city_district_type\":\"р-н\",\"city_district_type_full\":\"район\",\"city_district\":\"Донской\",\"settlement_fias_id\":null,\"settlement_kladr_id\":null,\"settlement_with_type\":null,\"settlement_type\":null,\"settlement_type_full\":null,\"settlement\":null,\"street_fias_id\":\"8fc06b0b-5de3-4a72-9e6f-9e0647a37a66\",\"street_kladr_id\":\"77000000000047600\",\"street_with_type\":\"Варшавское шоссе\",\"street_type\":\"ш\",\"street_type_full\":\"шоссе\",\"street\":\"Варшавское\",\"house_fias_id\":\"a41c0f52-7874-4b08-9f91-1067b87ddc6b\",\"house_kladr_id\":\"7700000000004760341\",\"house_cadnum\":null,\"house_type\":\"д\",\"house_type_full\":\"дом\",\"house\":\"18\",\"block_type\":\"к\",\"block_type_full\":\"корпус\",\"block\":\"1\",\"entrance\":null,\"floor\":null,\"flat_fias_id\":null,\"flat_cadnum\":null,\"flat_type\":null,\"flat_type_full\":null,\"flat\":null,\"flat_area\":null,\"square_meter_price\":\"194999\",\"flat_price\":null,\"postal_box\":null,\"fias_id\":\"a41c0f52-7874-4b08-9f91-1067b87ddc6b\",\"fias_code\":\"77000000000000004760341\",\"fias_level\":\"8\",\"fias_actuality_state\":\"0\",\"kladr_id\":\"7700000000004760341\",\"geoname_id\":\"524894\",\"capital_marker\":\"0\",\"okato\":\"45296561000\",\"oktmo\":\"45915000\",\"tax_office\":\"7726\",\"tax_office_legal\":\"7726\",\"timezone\":\"UTC+3\",\"geo_lat\":\"55.691963\",\"geo_lon\":\"37.620833\",\"beltway_hit\":\"IN_MKAD\",\"beltway_distance\":null,\"metro\":[{\"name\":\"Верхние Котлы\",\"line\":\"МЦК\",\"distance\":0.2},{\"name\":\"Крымская\",\"line\":\"МЦК\",\"distance\":1.0},{\"name\":\"Нагатинская\",\"line\":\"Серпуховско-Тимирязевская\",\"distance\":1.1}],\"qc_geo\":\"0\",\"qc_complete\":null,\"qc_house\":null,\"history_values\":null,\"unparsed_parts\":null,\"source\":null,\"qc\":null}}",
    "address_id": "f20da5a8-12eb-315d-684c-85c65aa5a713",
    "success": true
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Текст ошибки"
    }
  ]
}
Заказы

/api/lite/orders/shipped/report

Получение сводки по отправленным заказам с информацией о уникальных номерах(например чз)

/api/lite/orders/shipped/report

Возвращает сводные данные по заказам с данными по уникальным номерам

Для выполнения запроса необходимо обязательно задать параметры: date_from и date_to(период должен быть не больше недели), delivery_code ид курьерок через запятую. Можно так же задать не обязательные параметры size(не больше 500) - порция получаемых данных, и page - страница. По умолчанию size= 20 и page=0. Пример полного запроса

/api/lite/orders/shipped/report?delivery_code=7d7365f2-5189-ab7b-ddf3-9d6b41cca901,7d7365f2-5189-ab7b-ddf3-9d6b41cca902&date_from=2023-01-07T00:00:00&date_to=2023-01-14T23:59:59&page=0&size=400

Пример ответа:

{
    "orders": [
        {
            "currency": "RUB",
            "date": "2023-01-14 12:30:17.180",
            "shippingDate": "2023-01-17 12:30:17.180",
            "delivery": {
                "code": "8826c198-0815-d4ad-b3ab-0681ca7defbb",
                "deliveryCode": "OZON",
                "title": "OZON"
            },
            "externalId": "64029298-0041-2",
            "id": "64029298-0041-2",
            "shippedItems": [
                {
                    "accountingAttributes": [
                        {
                            "code": "uniquenumber",
                            "n": 1,
                            "stringValue": "4601532004939"
                        }
                    ],
                    "article": "4000023504",
                    "name": "Контейнер для порошка, 5 л (Полимербыт):6/18",
                    "price": 199.00,
                    "quantity": 1,
                    "variantId": "b3d82d45-b383-414e-94dc-34f8c2cd3296"
                }
            ],
            "status": "ORDER_INFO_SHIPPED",
            "totalOrderSum": 199.00
        },
        {
            "currency": "RUB",
            "date": "2023-01-14 12:09:43.014",
            "delivery": {
                "code": "8826c198-0815-d4ad-b3ab-0681ca7defbb",
                "deliveryCode": "OZON",
                "title": "OZON"
            },
            "externalId": "43319845-0119-1",
            "id": "43319845-0119-1",
            "shippedItems": [
                {
                    "accountingAttributes": [
                        {
                            "code": "uniquenumber",
                            "n": 1,
                            "stringValue": "4640043100471"
                        }
                    ],
                    "article": "1000324110",
                    "name": "SOFFIONE Premio Туалетная бумага Лаванда 3сл 4рул(Арх):10",
                    "price": 118.00,
                    "quantity": 1,
                    "variantId": "cc50d935-8a6c-4f67-ad94-202ea1bd35e4"
                }
            ],
            "status": "ORDER_INFO_SHIPPED",
            "totalOrderSum": 118.00
        },
        {
            "currency": "RUB",
            "date": "2023-01-14 09:52:22.214",
            "delivery": {
                "code": "8826c198-0815-d4ad-b3ab-0681ca7defbb",
                "deliveryCode": "OZON",
                "title": "OZON"
            },
            "externalId": "39501623-0020-1",
            "id": "39501623-0020-1",
            "shippedItems": [
                {
                    "accountingAttributes": [
                        {
                            "code": "uniquenumber",
                            "n": 1,
                            "stringValue": "9000101031669"
                        }
                    ],
                    "article": "1000203568",
                    "name": "Е Кондиционер д/белья Свежий 2л(Хенкель):8",
                    "price": 209.00,
                    "quantity": 1,
                    "variantId": "1407d0d7-b532-4992-8383-f7500bae5b67"
                }
            ],
            "status": "ORDER_INFO_SHIPPED",
            "totalOrderSum": 209.00
        }
    ],
    "recordsTotal": 27673,
    "success": true
}
Заказы

/api/lite/orders/history/status

Получение истории смены статусов по заказу

/api/lite/orders/history/status

Возвращает историю смены статуса по указанному заказу

Обязательный параметр: id заказа

 

Пример ответа:

{
    "items": [
        {
            "date": "2023-07-21 18:03:26.797",
            "infoStatus": "ORDER_INFO_SHIPPED"
        },
        {
            "date": "2023-07-21 18:03:08.270",
            "infoStatus": "ORDER_INFO_PACKED"
        },
        {
            "date": "2023-07-21 18:02:55.037",
            "infoStatus": "ORDER_INFO_IN_PACKING"
        },
        {
            "date": "2023-07-21 18:02:26.174",
            "infoStatus": "ORDER_INFO_READY_TO_PACK"
        },
        {
            "date": "2023-07-21 18:02:09.110",
            "infoStatus": "ORDER_INFO_REQUIRE_PAYMENT"
        },
        {
            "date": "2023-07-21 18:01:25.464",
            "infoStatus": "ORDER_INFO_NEED_CONFIRM"
        }
    ],
    "success": true
}

 

Заказы

/api/lite/orders/shipped/report/packings

Получение списка заказов отгруженных по указанной службе доставки за интервал

/api/lite/orders/shipped/report/packings

Возвращает список заказов, отгруженных в указанный интервал по указанной службе доставки.

Если служба доставки не указана - возвращает по всем службам доставки.

Для выполнения запроса необходимо задать параметры:

date_from и date_to(необязательно, период должен быть не больше недели),

delivery_company - интересующая служба доставки по перечислению DeliveryCompany.


Можно так же задать не обязательные параметры size(не больше 500) - порция получаемых данных, и page - страница. По умолчанию size= 20 и page=0.

Ответ - в формате стандартного списка заказов /api/lite/orders

 

Пример полного запроса

GET /api/lite/orders/shipped/report/packings?date_from=2020-08-01T01:00:00&date_to=2020-08-07T00:00:00&delivery_company=CDEK

Пример ответа:

{
    "orders": [
        {
            "c": "d4a5e0a9-7ac7-5970-9682-633beb98c8ea",
            "confirmStatus": "APPROVED",
            "createTs": "2020-08-06 10:56:46.496",
            "crossdockEditable": false,
            "currency": "RUB",
            "customData": "{\n  \"ozonPostingNumber\" : \"07003190-0086-3\"\n}",
            "customerPaymentInProcess": false,
            "date": "2023-02-06 10:56:46",
            "delivery": {
                "address": {
                    "block": "3",
                    "building": "4",
                    "city": "Москва",
                    "country": "Россия",
                    "countryCode": "RU",
                    "fullAddress": "Москва",
                    "house": "2",
                    "region": "Москва",
                    "street": "1"
                },
                "code": "145088e0-b11e-d2c3-a066-02526f15ac4f",
                "deliveryCode": "OZON",
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "18:00",
                "logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_ozon_left.svg",
                "receiver": {
                    "address": {
                        "block": "3",
                        "building": "4",
                        "city": "Москва",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Москва",
                        "house": "2",
                        "region": "Москва",
                        "street": "1"
                    },
                    "alternativePhone": "",
                    "name": "Покупатель на Озоне",
                    "passport": {},
                    "personType": "CUSTOMER",
                    "phone": "+70000000000",
                    "rawPhone": "+70000000000"
                },
                "title": "OZON",
                "trackingNumber": "07003190-0086-3",
                "trackingURL": "https://www.ozon.ru/",
                "type": "COURIER"
            },
            "expenses": [],
            "externalId": "162092860",
            "files": [],
            "id": "07003190-0086-3",
            "insuranceSum": 624.00,
            "insuranceSumAutoCalculation": true,
            "isMarketplaceOrder": true,
            "items": [
                {
                    "article": "FAQ-D-000110",
                    "barcode": "4601811006951",
                    "customData": "{\"marketplaceSkuId\":179692054}",
                    "img": "https://img.kak2c.ru/i/T/8/kgMdAI9R_c.jpg",
                    "itemAmountState": {
                        "amountDELIVERED": 1,
                        "amountLOST": 0,
                        "amountORDERED": 1,
                        "amountPACKED": 1,
                        "amountRESERVED": 1,
                        "amountRETURNED": 0,
                        "amountRETURNED_AS_CLAIMS": 0,
                        "amountRETURNED_DEFECTIVE": 0,
                        "amountRETURNED_TO_CLIENT": 0,
                        "amountSHIPPED": 1
                    },
                    "itemDimensions": {
                        "depth": 10,
                        "height": 20,
                        "width": 10
                    },
                    "itemWeight": 350,
                    "name": "Шампунь-гель для душа 2 в 1 Bro Cosmetics, WASSUP, MAN // очищает и тонизирует, Цвет: серый ",
                    "num": 1,
                    "price": 624.00,
                    "productExtId": "FAQ-D-000110",
                    "productId": "FAQ-D-000110",
                    "productVariantCount": 3,
                    "quantity": 1,
                    "quantityAvailable": 47,
                    "skuType": "SKU",
                    "variantExtId": "FAQ-D-000110",
                    "variantId": "FAQ-D-000110",
                    "vatRate": "NO_VAT",
                    "vatSkuProduct": "NO_VAT"
                },
                {
                    "article": "",
                    "barcode": "",
                    "name": "Доставка",
                    "num": 2,
                    "price": 0.00,
                    "quantity": 1,
                    "skuType": "SERVICE",
                    "variantId": "delivery",
                    "vatRate": "NO_VAT"
                }
            ],
            "legalEntity": {
                "id": "3c0a3ad3-b10f-4299-5b1b-a3d90b0c198a",
                "name": " Розничный покупатель",
                "type": "PERSON"
            },
            "manualDiscount": {
                "appliedDiscountValue": 0,
                "discountType": "FIX",
                "discountValue": 0,
                "isActive": false
            },
            "needCustomerPayment": false,
            "needReserve": true,
            "onlinePaymentSum": 624.00,
            "operatorComment": "-",
            "orderType": "STANDARD",
            "packingOptions": [],
            "packingVideos": [
                "http://cvs-2.kak2c.ru:21080/videoserver/video/2021-05-26/1f742f52-be58-11eb-5081-002590357b68.mp4"
            ],
            "packings": [
                {
                    "barcode": "6660000034777",
                    "files": [],
                    "items": [
                        {
                            "accountingAttributes": [],
                            "article": "FAQ-D-000110",
                            "barcode": "4601811006951",
                            "customData": "",
                            "img": "https://img.kak2c.ru/i/T/8/kgMdAI9R_c.jpg",
                            "itemDimensions": {
                                "depth": 10,
                                "height": 20,
                                "width": 10
                            },
                            "itemWeight": 350,
                            "name": "Шампунь-гель для душа 2 в 1 Bro Cosmetics, WASSUP, MAN // очищает и тонизирует, Цвет: серый ",
                            "num": 1,
                            "price": 624.00,
                            "productExtId": "FAQ-D-000110",
                            "productId": "FAQ-D-000110",
                            "productVariantCount": 3,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantExtId": "FAQ-D-000110",
                            "variantId": "FAQ-D-000110",
                            "vatRate": "NO_VAT",
                            "vatSkuProduct": "NO_VAT"
                        }
                    ],
                    "measurements": {
                        "dimensions": {
                            "depth": 100,
                            "height": 100,
                            "width": 180
                        },
                        "success": true,
                        "weight": 452
                    }
                }
            ],
            "paymentMethodCode": "online",
            "paymentMethodName": "Предоплата картой на сайте",
            "paymentMethodType": "ONLINE",
            "paymentStatus": "PAID",
            "permissionList": {
                "actionPermissions": [
                    {
                        "type": "CANCEL",
                        "value": false
                    },
                    {
                        "type": "CONFIRM",
                        "value": false
                    },
                    {
                        "type": "NEED_CONFIRM",
                        "value": false
                    },
                    {
                        "type": "PACK",
                        "value": false
                    },
                    {
                        "type": "COPY",
                        "value": true
                    },
                    {
                        "type": "PACK_CONTROL",
                        "value": false
                    },
                    {
                        "type": "UNPACK",
                        "value": false
                    },
                    {
                        "type": "SHIPPING",
                        "value": false
                    },
                    {
                        "type": "UNSHIPPING",
                        "value": false
                    },
                    {
                        "type": "REFRESH_RESERVE",
                        "value": false
                    },
                    {
                        "type": "RETURN_TO_DELIVERY",
                        "value": false
                    },
                    {
                        "type": "REVERT_RETURNS",
                        "value": false
                    },
                    {
                        "type": "DELIVER_SELF_PICKUP",
                        "value": false
                    },
                    {
                        "type": "DELIVER_COURIER",
                        "value": false
                    },
                    {
                        "type": "ACCEPT_RETURN",
                        "value": false
                    }
                ],
                "fieldPermissions": [
                    {
                        "reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
                        "type": "ITEMS_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
                        "type": "PAYMENT_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
                        "type": "IS_PAID_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
                        "type": "RECEIVER_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
                        "type": "DELIVERY_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
                        "type": "WAREHOUSE_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже упаковал заказ. Изменение заказа невозможно.",
                        "type": "COMMENTS_EDITABLE",
                        "value": false
                    },
                    {
                        "type": "OPERATOR_COMMENTS_EDITABLE",
                        "value": true
                    }
                ],
                "infoStatus": "ORDER_INFO_DELIVERED"
            },
            "plannedTakeOutDate": "2020-08-07 13:00:00",
            "readyForFFExport": true,
            "shortUrl": "http://r.kak2c.ru/0700jhr",
            "status": "ORDER_INFO_DELIVERED",
            "summaryItemAmountState": {
                "amountDELIVERED": 1,
                "amountLOST": 0,
                "amountORDERED": 1,
                "amountPACKED": 1,
                "amountRESERVED": 1,
                "amountRETURNED": 0,
                "amountRETURNED_AS_CLAIMS": 0,
                "amountRETURNED_DEFECTIVE": 0,
                "amountRETURNED_TO_CLIENT": 0,
                "amountSHIPPED": 1
            },
            "totalOrderSum": 624.00,
            "updateTs": "2023-04-03 15:38:17.233",
            "warehouseCode": "6805bc64-270f-ae7d-1231-773ff181e446",
            "warehouseFFExportError": false,
            "warehouseFFExported": true,
            "warehouseFFSync": true,
            "warehouseFFSyncDate": "2020-08-06 11:00:35",
            "warehouseName": "Tempoline",
            "warehouseShippingOptions": {
                "packingType": "MIX_PACKINGS"
            }
        }
      }
     ],
    "recordsTotal": 1,
    "success": true
}
Заказы

/api/lite/orders/shipped/report/cod

Получение списка заказов по которым были переведены наложенные платежи 

/api/lite/orders/shipped/report/cod

Возвращает список заказов, по которым с указанной в запросе даты были переводы наложенных платежей по бухгалтерии.

Для выполнения запроса необходимо задать параметры:

date_from  - дата для поиска даты перевода платежей (поле executionTime в codPayments заказов)

 


Можно так же задать не обязательные параметры size(не больше 500) - порция получаемых данных, и page - страница. По умолчанию size= 20 и page=0.

Ответ - в формате стандартного списка заказов /api/lite/orders

 

Пример полного запроса

GET https://app.kak2c.ru/api/lite/orders/shipped/report/cod?date_from=2020-01-01T00:00:00

Пример ответа:

{
    "orders": [
        {
            "c": "a0737972-c6bb-0759-35df-afd6bc2e6400",
            "codPayments": [
                {
                    "date": "2022-05-30 14:03:44",
                    "executionTime": "2022-05-30 14:30:00",
                    "paymentDocumentId": "BR0237-1",
                    "sum": 8857.00
                }
            ],
            "comment": "",
            "confirmStatus": "APPROVED",
            "createTs": "2022-05-30 14:04:18.900",
            "crossdockEditable": false,
            "currency": "RUB",
            "customerPaymentInProcess": false,
            "date": "2022-05-30 14:03:44",
            "delivery": {
                "address": {
                    "city": "Москва",
                    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "country": "Россия",
                    "countryCode": "RU",
                    "fullAddress": "Москва",
                    "rawData": "Москва",
                    "region": "Москва",
                    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "zip": "143582"
                },
                "code": "77e87a14-4e96-2ccb-3beb-4b1b33e466c8",
                "deliveryCode": "0ed6b628-288d-11e9-8989-002590923634",
                "deliveryComment": "",
                "desiredDeliveryDate": "2022-05-31",
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "18:00",
                "isDeliverySumLimitActive": false,
                "logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
                "pickupPointId": "5001-152",
                "pvzComment": "ПВЗ PickPoint, Код пункта выдачи: 5001-152, Адрес пункта выдачи: Невская ул., д. 704, График работы: Пн-Вс 10:00-22:00, Описание пункта выдачи: Постамат расположен в ТЦ Княжий двор. Перед ТЦ развязка общественного транспорта, остановка Памятник. От ж/д станции Нахабино - Транспорт: Автобус №20, 21. От метро Щукинская - Транспорт: Маршрутное такси №480\nВойти в ТЦ через центральный вход, подняться по лестнице на 2 этаж, повернуть направо, пройти прямо. С левой стороны вдоль стены расположен постамат.",
                "pvzInfo": {
                    "address": {
                        "city": "Москва",
                        "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Невская ул., д. 704",
                        "region": "Москва",
                        "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "zip": "143582"
                    },
                    "code": "5001-152",
                    "courier": "PickPoint",
                    "courierCode": "PICKPOINT",
                    "courierPostamatType": "АПТ",
                    "deliveryServices": [
                        "DAY_OFF_DELIVERY",
                        "CONTACTLESS_DELIVERY",
                        "TEMPERATURE_REGIME",
                        "TRYING",
                        "CHECK_CONTENT",
                        "DANGEROUS_CARGO",
                        "PARTIAL_DELIVERY",
                        "PERSONALLY_IN_HANDS",
                        "REVERSE"
                    ],
                    "description": "Постамат расположен в ТЦ Княжий двор. Перед ТЦ развязка общественного транспорта, остановка Памятник. От ж/д станции Нахабино - Транспорт: Автобус №20, 21. От метро Щукинская - Транспорт: Маршрутное такси №480\nВойти в ТЦ через центральный вход, подняться по лестнице на 2 этаж, повернуть направо, пройти прямо. С левой стороны вдоль стены расположен постамат.",
                    "latitude": "55.812358",
                    "longitude": "37.04213",
                    "maxSize": "64x40.5x35.8",
                    "maxWeight": 15,
                    "metroStation": "метро Щукинская",
                    "paymentMethods": [
                        "COD_CASH",
                        "COD_CARD"
                    ],
                    "type": "Postamat",
                    "workTime": "Пн-Вс 10:00-22:00"
                },
                "receiver": {
                    "address": {
                        "city": "Москва",
                        "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Москва",
                        "rawData": "Москва",
                        "region": "Москва",
                        "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "zip": "143582"
                    },
                    "alternativePhone": "",
                    "email": "mer@mer.mer",
                    "fullName": "Цу Йцу",
                    "name": "цу йцу",
                    "passport": {},
                    "personType": "CUSTOMER",
                    "phone": "74563464645",
                    "rawPhone": "74563464645"
                },
                "title": "PickPoint",
                "trackingNumber": "test333",
                "type": "PVZ"
            },
            "expenses": [],
            "externalId": "BR0237",
            "files": [],
            "id": "BR0237",
            "insuranceSum": 8857.00,
            "insuranceSumAutoCalculation": false,
            "isMarketplaceOrder": false,
            "items": [
                {
                    "barcode": "4211125637101",
                    "itemAmountState": {
                        "amountDELIVERED": 1,
                        "amountLOST": 0,
                        "amountORDERED": 1,
                        "amountPACKED": 1,
                        "amountRESERVED": 1,
                        "amountRETURNED": 0,
                        "amountRETURNED_AS_CLAIMS": 0,
                        "amountRETURNED_DEFECTIVE": 0,
                        "amountRETURNED_TO_CLIENT": 0,
                        "amountSHIPPED": 1
                    },
                    "itemDimensions": {
                        "depth": 26,
                        "height": 50,
                        "width": 42
                    },
                    "itemWeight": 5580,
                    "name": "Гидромассажная ванночка для ног Beurer FB50 белый",
                    "num": 1,
                    "price": 8000.00,
                    "productId": "1059034",
                    "productVariantCount": 1,
                    "quantity": 1,
                    "quantityAvailable": 0,
                    "skuType": "SKU",
                    "variantId": "1059034",
                    "vatRate": "VAT_20"
                },
                {
                    "barcode": "",
                    "name": "Доставка",
                    "num": 2,
                    "price": 857.00,
                    "quantity": 1,
                    "skuType": "SERVICE",
                    "variantId": "delivery",
                    "vatRate": "NO_VAT"
                }
            ],
            "legalEntity": {
                "id": "fa0d6c85-6e62-51fa-346e-e5433c92b2d8",
                "name": " Розничный покупатель",
                "type": "PERSON"
            },
            "manualDiscount": {
                "appliedDiscountValue": 0,
                "discountType": "FIX",
                "discountValue": 0,
                "isActive": false
            },
            "needCustomerPayment": false,
            "needReserve": true,
            "onlinePaymentSum": 8857.00,
            "operatorComment": "-",
            "orderType": "STANDARD",
            "packingOptions": [],
            "packings": [
                {
                    "barcode": "202749272704",
                    "files": [],
                    "items": [
                        {
                            "accountingAttributes": [],
                            "barcode": "4211125637101",
                            "itemDimensions": {
                                "depth": 26,
                                "height": 50,
                                "width": 42
                            },
                            "itemWeight": 5580,
                            "name": "Гидромассажная ванночка для ног Beurer FB50 белый",
                            "num": 1,
                            "price": 8000.00,
                            "productId": "1059034",
                            "productVariantCount": 1,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantId": "1059034",
                            "vatRate": "VAT_20"
                        }
                    ],
                    "measurements": {
                        "dimensions": {
                            "depth": 12,
                            "height": 12,
                            "width": 12
                        },
                        "success": true,
                        "weight": 5580
                    }
                }
            ],
            "paymentMethodCode": "cod-card",
            "paymentMethodName": "Оплата картой при получении",
            "paymentMethodType": "COD_CARD",
            "paymentStatus": "NOT_PAID",
            "permissionList": {
                "actionPermissions": [
                    {
                        "type": "CANCEL",
                        "value": false
                    },
                    {
                        "type": "CONFIRM",
                        "value": false
                    },
                    {
                        "type": "NEED_CONFIRM",
                        "value": false
                    },
                    {
                        "type": "PACK",
                        "value": false
                    },
                    {
                        "type": "COPY",
                        "value": true
                    },
                    {
                        "type": "PACK_CONTROL",
                        "value": false
                    },
                    {
                        "type": "UNPACK",
                        "value": false
                    },
                    {
                        "type": "SHIPPING",
                        "value": false
                    },
                    {
                        "type": "UNSHIPPING",
                        "value": false
                    },
                    {
                        "type": "REFRESH_RESERVE",
                        "value": false
                    },
                    {
                        "type": "RETURN_TO_DELIVERY",
                        "value": true
                    },
                    {
                        "type": "REVERT_RETURNS",
                        "value": false
                    },
                    {
                        "type": "DELIVER_SELF_PICKUP",
                        "value": false
                    },
                    {
                        "type": "DELIVER_COURIER",
                        "value": false
                    },
                    {
                        "type": "ACCEPT_RETURN",
                        "value": false
                    }
                ],
                "fieldPermissions": [
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "ITEMS_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "PAYMENT_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "IS_PAID_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "RECEIVER_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "DELIVERY_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "WAREHOUSE_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "COMMENTS_EDITABLE",
                        "value": false
                    },
                    {
                        "type": "OPERATOR_COMMENTS_EDITABLE",
                        "value": true
                    }
                ],
                "infoStatus": "ORDER_INFO_DELIVERED"
            },
            "plannedTakeOutDate": "2022-05-31 09:00:00",
            "readyForFFExport": true,
            "shortUrl": "http://r.kak2c.ru/yr99em9",
            "status": "ORDER_INFO_DELIVERED",
            "summaryItemAmountState": {
                "amountDELIVERED": 1,
                "amountLOST": 0,
                "amountORDERED": 1,
                "amountPACKED": 1,
                "amountRESERVED": 1,
                "amountRETURNED": 0,
                "amountRETURNED_AS_CLAIMS": 0,
                "amountRETURNED_DEFECTIVE": 0,
                "amountRETURNED_TO_CLIENT": 0,
                "amountSHIPPED": 1
            },
            "totalOrderSum": 8857.00,
            "updateTs": "2022-05-30 14:29:35.964",
            "warehouseCode": "2b0cde46-043f-cdc9-e2e4-aed4ff5a7d4f",
            "warehouseFFExportError": false,
            "warehouseFFExported": false,
            "warehouseFFSync": false,
            "warehouseName": "BR_K",
            "warehouseShippingOptions": {}
        },
        {
            "c": "451dd9fc-9347-e7e4-c51d-e7842d870e40",
            "codPayments": [
                {
                    "date": "2022-05-31 12:22:16",
                    "executionTime": "2022-05-31 13:15:00",
                    "paymentDocumentId": "BR0255-1",
                    "sum": 5486.00
                }
            ],
            "comment": "",
            "confirmStatus": "APPROVED",
            "createTs": "2022-05-31 12:22:16.171",
            "crossdockEditable": false,
            "currency": "RUB",
            "customerPaymentInProcess": false,
            "date": "2022-05-31 12:21:38",
            "delivery": {
                "address": {
                    "city": "Краснодар",
                    "cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
                    "country": "Россия",
                    "countryCode": "RU",
                    "fullAddress": "Краснодарский, Краснодар",
                    "rawData": "Краснодарский, Краснодар",
                    "region": "Краснодарский",
                    "regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
                    "zip": "350016"
                },
                "code": "77e87a14-4e96-2ccb-3beb-4b1b33e466c8",
                "deliveryCode": "0ed6b628-288d-11e9-8989-002590923634",
                "deliveryComment": "",
                "desiredDeliveryDate": "2022-06-02",
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "18:00",
                "isDeliverySumLimitActive": false,
                "logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
                "pickupPointId": "2302-060",
                "pvzComment": "ПВЗ PickPoint, Код пункта выдачи: 2302-060, Адрес пункта выдачи: Карякина ул, д.25, График работы: Пн-Пт 10:00-20:00, Сб 10:00-17:00, Описание пункта выдачи: Пункт выдачи заказов расположен в отдельно стоящем здании. Транспорт: Автобус №36, 58, 96. Маршрутное такси №48, 56, 85. Остановка Черкасская ул.\nВойти через отдельный вход справа, на цокольном этаже расположен пункт выдачи",
                "pvzInfo": {
                    "address": {
                        "city": "Краснодар",
                        "cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Карякина ул, д.25",
                        "region": "Краснодарский",
                        "regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
                        "zip": "350016"
                    },
                    "code": "2302-060",
                    "courier": "PickPoint",
                    "courierCode": "PICKPOINT",
                    "courierPostamatType": "ПВЗ",
                    "deliveryServices": [
                        "TRYING",
                        "DANGEROUS_CARGO",
                        "PARTIAL_DELIVERY",
                        "PERSONALLY_IN_HANDS",
                        "REVERSE",
                        "CHECK_CONTENT",
                        "DAY_OFF_DELIVERY",
                        "CONTACTLESS_DELIVERY",
                        "TEMPERATURE_REGIME"
                    ],
                    "description": "Пункт выдачи заказов расположен в отдельно стоящем здании. Транспорт: Автобус №36, 58, 96. Маршрутное такси №48, 56, 85. Остановка Черкасская ул.\nВойти через отдельный вход справа, на цокольном этаже расположен пункт выдачи",
                    "latitude": "45.065947",
                    "longitude": "39.010823",
                    "maxSize": "180",
                    "maxWeight": 15,
                    "metroStation": "",
                    "paymentMethods": [
                        "COD_CASH",
                        "COD_CARD"
                    ],
                    "type": "PVZ",
                    "workTime": "Пн-Пт 10:00-20:00, Сб 10:00-17:00"
                },
                "receiver": {
                    "address": {
                        "city": "Краснодар",
                        "cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Краснодарский, Краснодар",
                        "rawData": "Краснодарский, Краснодар",
                        "region": "Краснодарский",
                        "regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
                        "zip": "350016"
                    },
                    "alternativePhone": "",
                    "email": "mer@mer.mer",
                    "fullName": "Цу Йцу",
                    "name": "цу йцу",
                    "passport": {},
                    "personType": "CUSTOMER",
                    "phone": "74563464645",
                    "rawPhone": "74563464645"
                },
                "title": "PickPoint",
                "trackingNumber": "222",
                "type": "PVZ"
            },
            "expenses": [],
            "externalId": "BR0255",
            "files": [],
            "id": "BR0255",
            "insuranceSum": 548.60,
            "insuranceSumAutoCalculation": false,
            "isMarketplaceOrder": false,
            "items": [
                {
                    "barcode": "4211125570354",
                    "itemAmountState": {
                        "amountDELIVERED": 1,
                        "amountLOST": 0,
                        "amountORDERED": 1,
                        "amountPACKED": 1,
                        "amountRESERVED": 1,
                        "amountRETURNED": 0,
                        "amountRETURNED_AS_CLAIMS": 0,
                        "amountRETURNED_DEFECTIVE": 0,
                        "amountRETURNED_TO_CLIENT": 0,
                        "amountSHIPPED": 1
                    },
                    "itemDimensions": {
                        "depth": 17,
                        "height": 7,
                        "width": 23
                    },
                    "itemWeight": 167,
                    "name": "Маникюрно-педикюрный набор Beurer MP62 белый",
                    "num": 1,
                    "price": 5000.00,
                    "productId": "1047872",
                    "productVariantCount": 1,
                    "quantity": 1,
                    "quantityAvailable": 0,
                    "skuType": "SKU",
                    "variantId": "1047872",
                    "vatRate": "VAT_20"
                },
                {
                    "barcode": "",
                    "name": "Доставка",
                    "num": 2,
                    "price": 486.00,
                    "quantity": 1,
                    "skuType": "SERVICE",
                    "variantId": "delivery",
                    "vatRate": "NO_VAT"
                }
            ],
            "legalEntity": {
                "id": "fa0d6c85-6e62-51fa-346e-e5433c92b2d8",
                "name": " Розничный покупатель",
                "type": "PERSON"
            },
            "manualDiscount": {
                "appliedDiscountValue": 0,
                "discountType": "FIX",
                "discountValue": 0,
                "isActive": false
            },
            "needCustomerPayment": false,
            "needReserve": true,
            "onlinePaymentSum": 5486.00,
            "operatorComment": "",
            "orderType": "STANDARD",
            "packingOptions": [],
            "packings": [
                {
                    "barcode": "202749561679",
                    "files": [],
                    "items": [
                        {
                            "accountingAttributes": [],
                            "barcode": "4211125570354",
                            "itemDimensions": {
                                "depth": 17,
                                "height": 7,
                                "width": 23
                            },
                            "itemWeight": 167,
                            "name": "Маникюрно-педикюрный набор Beurer MP62 белый",
                            "num": 1,
                            "price": 5000.00,
                            "productId": "1047872",
                            "productVariantCount": 1,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantId": "1047872",
                            "vatRate": "VAT_20"
                        }
                    ],
                    "measurements": {
                        "dimensions": {
                            "depth": 12,
                            "height": 12,
                            "width": 12
                        },
                        "success": true,
                        "weight": 1000
                    }
                }
            ],
            "paymentMethodCode": "cod-card",
            "paymentMethodName": "Оплата картой при получении",
            "paymentMethodType": "COD_CARD",
            "paymentStatus": "NOT_PAID",
            "permissionList": {
                "actionPermissions": [
                    {
                        "type": "CANCEL",
                        "value": false
                    },
                    {
                        "type": "CONFIRM",
                        "value": false
                    },
                    {
                        "type": "NEED_CONFIRM",
                        "value": false
                    },
                    {
                        "type": "PACK",
                        "value": false
                    },
                    {
                        "type": "COPY",
                        "value": true
                    },
                    {
                        "type": "PACK_CONTROL",
                        "value": false
                    },
                    {
                        "type": "UNPACK",
                        "value": false
                    },
                    {
                        "type": "SHIPPING",
                        "value": false
                    },
                    {
                        "type": "UNSHIPPING",
                        "value": false
                    },
                    {
                        "type": "REFRESH_RESERVE",
                        "value": false
                    },
                    {
                        "type": "RETURN_TO_DELIVERY",
                        "value": true
                    },
                    {
                        "type": "REVERT_RETURNS",
                        "value": false
                    },
                    {
                        "type": "DELIVER_SELF_PICKUP",
                        "value": false
                    },
                    {
                        "type": "DELIVER_COURIER",
                        "value": false
                    },
                    {
                        "type": "ACCEPT_RETURN",
                        "value": false
                    }
                ],
                "fieldPermissions": [
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "ITEMS_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "PAYMENT_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "IS_PAID_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "RECEIVER_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "DELIVERY_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "WAREHOUSE_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "COMMENTS_EDITABLE",
                        "value": false
                    },
                    {
                        "type": "OPERATOR_COMMENTS_EDITABLE",
                        "value": true
                    }
                ],
                "infoStatus": "ORDER_INFO_DELIVERED"
            },
            "plannedTakeOutDate": "2022-06-01 09:00:00",
            "readyForFFExport": true,
            "shortUrl": "http://r.kak2c.ru/h5llc00",
            "status": "ORDER_INFO_DELIVERED",
            "summaryItemAmountState": {
                "amountDELIVERED": 1,
                "amountLOST": 0,
                "amountORDERED": 1,
                "amountPACKED": 1,
                "amountRESERVED": 1,
                "amountRETURNED": 0,
                "amountRETURNED_AS_CLAIMS": 0,
                "amountRETURNED_DEFECTIVE": 0,
                "amountRETURNED_TO_CLIENT": 0,
                "amountSHIPPED": 1
            },
            "totalOrderSum": 5486.00,
            "updateTs": "2022-05-31 13:13:34.341",
            "warehouseCode": "2b0cde46-043f-cdc9-e2e4-aed4ff5a7d4f",
            "warehouseFFExportError": false,
            "warehouseFFExported": false,
            "warehouseFFSync": false,
            "warehouseName": "BR_K",
            "warehouseShippingOptions": {}
        }
    ],
    "recordsTotal": 2,
    "success": true
}
Заказы

/api/lite/orders/shipped/report/no/delivery/statuses

Получение списка отгруженных заказов по которым не было статусов доставки  

/api/lite/orders/shipped/report/no/delivery/statuses

Возвращает список заказов, по которым с указанной в запросе даты была отгрузка но не было значимых статусов доставки более 24 часов (= заказ похоже не доехал до СЦ КС и проблемный)

Для выполнения запроса необходимо задать параметры:

date_from  - дата отгрузки заказов

 


Можно так же задать не обязательные параметры size(не больше 500) - порция получаемых данных, и page - страница. По умолчанию size= 20 и page=0.

Ответ - в формате стандартного списка заказов /api/lite/orders

 

Пример полного запроса

GET https://app.kak2c.ru/api/lite/orders/shipped/report/no/delivery/statuses?date_from=2020-01-01T00:00:00

Пример ответа:

{
    "orders": [
        {
            "c": "a0737972-c6bb-0759-35df-afd6bc2e6400",
            "codPayments": [
                {
                    "date": "2022-05-30 14:03:44",
                    "executionTime": "2022-05-30 14:30:00",
                    "paymentDocumentId": "BR0237-1",
                    "sum": 8857.00
                }
            ],
            "comment": "",
            "confirmStatus": "APPROVED",
            "createTs": "2022-05-30 14:04:18.900",
            "crossdockEditable": false,
            "currency": "RUB",
            "customerPaymentInProcess": false,
            "date": "2022-05-30 14:03:44",
            "delivery": {
                "address": {
                    "city": "Москва",
                    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "country": "Россия",
                    "countryCode": "RU",
                    "fullAddress": "Москва",
                    "rawData": "Москва",
                    "region": "Москва",
                    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "zip": "143582"
                },
                "code": "77e87a14-4e96-2ccb-3beb-4b1b33e466c8",
                "deliveryCode": "0ed6b628-288d-11e9-8989-002590923634",
                "deliveryComment": "",
                "desiredDeliveryDate": "2022-05-31",
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "18:00",
                "isDeliverySumLimitActive": false,
                "logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
                "pickupPointId": "5001-152",
                "pvzComment": "ПВЗ PickPoint, Код пункта выдачи: 5001-152, Адрес пункта выдачи: Невская ул., д. 704, График работы: Пн-Вс 10:00-22:00, Описание пункта выдачи: Постамат расположен в ТЦ Княжий двор. Перед ТЦ развязка общественного транспорта, остановка Памятник. От ж/д станции Нахабино - Транспорт: Автобус №20, 21. От метро Щукинская - Транспорт: Маршрутное такси №480\nВойти в ТЦ через центральный вход, подняться по лестнице на 2 этаж, повернуть направо, пройти прямо. С левой стороны вдоль стены расположен постамат.",
                "pvzInfo": {
                    "address": {
                        "city": "Москва",
                        "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Невская ул., д. 704",
                        "region": "Москва",
                        "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "zip": "143582"
                    },
                    "code": "5001-152",
                    "courier": "PickPoint",
                    "courierCode": "PICKPOINT",
                    "courierPostamatType": "АПТ",
                    "deliveryServices": [
                        "DAY_OFF_DELIVERY",
                        "CONTACTLESS_DELIVERY",
                        "TEMPERATURE_REGIME",
                        "TRYING",
                        "CHECK_CONTENT",
                        "DANGEROUS_CARGO",
                        "PARTIAL_DELIVERY",
                        "PERSONALLY_IN_HANDS",
                        "REVERSE"
                    ],
                    "description": "Постамат расположен в ТЦ Княжий двор. Перед ТЦ развязка общественного транспорта, остановка Памятник. От ж/д станции Нахабино - Транспорт: Автобус №20, 21. От метро Щукинская - Транспорт: Маршрутное такси №480\nВойти в ТЦ через центральный вход, подняться по лестнице на 2 этаж, повернуть направо, пройти прямо. С левой стороны вдоль стены расположен постамат.",
                    "latitude": "55.812358",
                    "longitude": "37.04213",
                    "maxSize": "64x40.5x35.8",
                    "maxWeight": 15,
                    "metroStation": "метро Щукинская",
                    "paymentMethods": [
                        "COD_CASH",
                        "COD_CARD"
                    ],
                    "type": "Postamat",
                    "workTime": "Пн-Вс 10:00-22:00"
                },
                "receiver": {
                    "address": {
                        "city": "Москва",
                        "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Москва",
                        "rawData": "Москва",
                        "region": "Москва",
                        "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                        "zip": "143582"
                    },
                    "alternativePhone": "",
                    "email": "mer@mer.mer",
                    "fullName": "Цу Йцу",
                    "name": "цу йцу",
                    "passport": {},
                    "personType": "CUSTOMER",
                    "phone": "74563464645",
                    "rawPhone": "74563464645"
                },
                "title": "PickPoint",
                "trackingNumber": "test333",
                "type": "PVZ"
            },
            "expenses": [],
            "externalId": "BR0237",
            "files": [],
            "id": "BR0237",
            "insuranceSum": 8857.00,
            "insuranceSumAutoCalculation": false,
            "isMarketplaceOrder": false,
            "items": [
                {
                    "barcode": "4211125637101",
                    "itemAmountState": {
                        "amountDELIVERED": 1,
                        "amountLOST": 0,
                        "amountORDERED": 1,
                        "amountPACKED": 1,
                        "amountRESERVED": 1,
                        "amountRETURNED": 0,
                        "amountRETURNED_AS_CLAIMS": 0,
                        "amountRETURNED_DEFECTIVE": 0,
                        "amountRETURNED_TO_CLIENT": 0,
                        "amountSHIPPED": 1
                    },
                    "itemDimensions": {
                        "depth": 26,
                        "height": 50,
                        "width": 42
                    },
                    "itemWeight": 5580,
                    "name": "Гидромассажная ванночка для ног Beurer FB50 белый",
                    "num": 1,
                    "price": 8000.00,
                    "productId": "1059034",
                    "productVariantCount": 1,
                    "quantity": 1,
                    "quantityAvailable": 0,
                    "skuType": "SKU",
                    "variantId": "1059034",
                    "vatRate": "VAT_20"
                },
                {
                    "barcode": "",
                    "name": "Доставка",
                    "num": 2,
                    "price": 857.00,
                    "quantity": 1,
                    "skuType": "SERVICE",
                    "variantId": "delivery",
                    "vatRate": "NO_VAT"
                }
            ],
            "legalEntity": {
                "id": "fa0d6c85-6e62-51fa-346e-e5433c92b2d8",
                "name": " Розничный покупатель",
                "type": "PERSON"
            },
            "manualDiscount": {
                "appliedDiscountValue": 0,
                "discountType": "FIX",
                "discountValue": 0,
                "isActive": false
            },
            "needCustomerPayment": false,
            "needReserve": true,
            "onlinePaymentSum": 8857.00,
            "operatorComment": "-",
            "orderType": "STANDARD",
            "packingOptions": [],
            "packings": [
                {
                    "barcode": "202749272704",
                    "files": [],
                    "items": [
                        {
                            "accountingAttributes": [],
                            "barcode": "4211125637101",
                            "itemDimensions": {
                                "depth": 26,
                                "height": 50,
                                "width": 42
                            },
                            "itemWeight": 5580,
                            "name": "Гидромассажная ванночка для ног Beurer FB50 белый",
                            "num": 1,
                            "price": 8000.00,
                            "productId": "1059034",
                            "productVariantCount": 1,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantId": "1059034",
                            "vatRate": "VAT_20"
                        }
                    ],
                    "measurements": {
                        "dimensions": {
                            "depth": 12,
                            "height": 12,
                            "width": 12
                        },
                        "success": true,
                        "weight": 5580
                    }
                }
            ],
            "paymentMethodCode": "cod-card",
            "paymentMethodName": "Оплата картой при получении",
            "paymentMethodType": "COD_CARD",
            "paymentStatus": "NOT_PAID",
            "permissionList": {
                "actionPermissions": [
                    {
                        "type": "CANCEL",
                        "value": false
                    },
                    {
                        "type": "CONFIRM",
                        "value": false
                    },
                    {
                        "type": "NEED_CONFIRM",
                        "value": false
                    },
                    {
                        "type": "PACK",
                        "value": false
                    },
                    {
                        "type": "COPY",
                        "value": true
                    },
                    {
                        "type": "PACK_CONTROL",
                        "value": false
                    },
                    {
                        "type": "UNPACK",
                        "value": false
                    },
                    {
                        "type": "SHIPPING",
                        "value": false
                    },
                    {
                        "type": "UNSHIPPING",
                        "value": false
                    },
                    {
                        "type": "REFRESH_RESERVE",
                        "value": false
                    },
                    {
                        "type": "RETURN_TO_DELIVERY",
                        "value": true
                    },
                    {
                        "type": "REVERT_RETURNS",
                        "value": false
                    },
                    {
                        "type": "DELIVER_SELF_PICKUP",
                        "value": false
                    },
                    {
                        "type": "DELIVER_COURIER",
                        "value": false
                    },
                    {
                        "type": "ACCEPT_RETURN",
                        "value": false
                    }
                ],
                "fieldPermissions": [
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "ITEMS_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "PAYMENT_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "IS_PAID_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "RECEIVER_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "DELIVERY_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "WAREHOUSE_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "COMMENTS_EDITABLE",
                        "value": false
                    },
                    {
                        "type": "OPERATOR_COMMENTS_EDITABLE",
                        "value": true
                    }
                ],
                "infoStatus": "ORDER_INFO_DELIVERED"
            },
            "plannedTakeOutDate": "2022-05-31 09:00:00",
            "readyForFFExport": true,
            "shortUrl": "http://r.kak2c.ru/yr99em9",
            "status": "ORDER_INFO_DELIVERED",
            "summaryItemAmountState": {
                "amountDELIVERED": 1,
                "amountLOST": 0,
                "amountORDERED": 1,
                "amountPACKED": 1,
                "amountRESERVED": 1,
                "amountRETURNED": 0,
                "amountRETURNED_AS_CLAIMS": 0,
                "amountRETURNED_DEFECTIVE": 0,
                "amountRETURNED_TO_CLIENT": 0,
                "amountSHIPPED": 1
            },
            "totalOrderSum": 8857.00,
            "updateTs": "2022-05-30 14:29:35.964",
            "warehouseCode": "2b0cde46-043f-cdc9-e2e4-aed4ff5a7d4f",
            "warehouseFFExportError": false,
            "warehouseFFExported": false,
            "warehouseFFSync": false,
            "warehouseName": "BR_K",
            "warehouseShippingOptions": {}
        },
        {
            "c": "451dd9fc-9347-e7e4-c51d-e7842d870e40",
            "codPayments": [
                {
                    "date": "2022-05-31 12:22:16",
                    "executionTime": "2022-05-31 13:15:00",
                    "paymentDocumentId": "BR0255-1",
                    "sum": 5486.00
                }
            ],
            "comment": "",
            "confirmStatus": "APPROVED",
            "createTs": "2022-05-31 12:22:16.171",
            "crossdockEditable": false,
            "currency": "RUB",
            "customerPaymentInProcess": false,
            "date": "2022-05-31 12:21:38",
            "delivery": {
                "address": {
                    "city": "Краснодар",
                    "cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
                    "country": "Россия",
                    "countryCode": "RU",
                    "fullAddress": "Краснодарский, Краснодар",
                    "rawData": "Краснодарский, Краснодар",
                    "region": "Краснодарский",
                    "regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
                    "zip": "350016"
                },
                "code": "77e87a14-4e96-2ccb-3beb-4b1b33e466c8",
                "deliveryCode": "0ed6b628-288d-11e9-8989-002590923634",
                "deliveryComment": "",
                "desiredDeliveryDate": "2022-06-02",
                "desiredDeliveryTimeFrom": "09:00",
                "desiredDeliveryTimeTo": "18:00",
                "isDeliverySumLimitActive": false,
                "logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
                "pickupPointId": "2302-060",
                "pvzComment": "ПВЗ PickPoint, Код пункта выдачи: 2302-060, Адрес пункта выдачи: Карякина ул, д.25, График работы: Пн-Пт 10:00-20:00, Сб 10:00-17:00, Описание пункта выдачи: Пункт выдачи заказов расположен в отдельно стоящем здании. Транспорт: Автобус №36, 58, 96. Маршрутное такси №48, 56, 85. Остановка Черкасская ул.\nВойти через отдельный вход справа, на цокольном этаже расположен пункт выдачи",
                "pvzInfo": {
                    "address": {
                        "city": "Краснодар",
                        "cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Карякина ул, д.25",
                        "region": "Краснодарский",
                        "regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
                        "zip": "350016"
                    },
                    "code": "2302-060",
                    "courier": "PickPoint",
                    "courierCode": "PICKPOINT",
                    "courierPostamatType": "ПВЗ",
                    "deliveryServices": [
                        "TRYING",
                        "DANGEROUS_CARGO",
                        "PARTIAL_DELIVERY",
                        "PERSONALLY_IN_HANDS",
                        "REVERSE",
                        "CHECK_CONTENT",
                        "DAY_OFF_DELIVERY",
                        "CONTACTLESS_DELIVERY",
                        "TEMPERATURE_REGIME"
                    ],
                    "description": "Пункт выдачи заказов расположен в отдельно стоящем здании. Транспорт: Автобус №36, 58, 96. Маршрутное такси №48, 56, 85. Остановка Черкасская ул.\nВойти через отдельный вход справа, на цокольном этаже расположен пункт выдачи",
                    "latitude": "45.065947",
                    "longitude": "39.010823",
                    "maxSize": "180",
                    "maxWeight": 15,
                    "metroStation": "",
                    "paymentMethods": [
                        "COD_CASH",
                        "COD_CARD"
                    ],
                    "type": "PVZ",
                    "workTime": "Пн-Пт 10:00-20:00, Сб 10:00-17:00"
                },
                "receiver": {
                    "address": {
                        "city": "Краснодар",
                        "cityFias": "7dfa745e-aa19-4688-b121-b655c11e482f",
                        "country": "Россия",
                        "countryCode": "RU",
                        "fullAddress": "Краснодарский, Краснодар",
                        "rawData": "Краснодарский, Краснодар",
                        "region": "Краснодарский",
                        "regionFias": "d00e1013-16bd-4c09-b3d5-3cb09fc54bd8",
                        "zip": "350016"
                    },
                    "alternativePhone": "",
                    "email": "mer@mer.mer",
                    "fullName": "Цу Йцу",
                    "name": "цу йцу",
                    "passport": {},
                    "personType": "CUSTOMER",
                    "phone": "74563464645",
                    "rawPhone": "74563464645"
                },
                "title": "PickPoint",
                "trackingNumber": "222",
                "type": "PVZ"
            },
            "expenses": [],
            "externalId": "BR0255",
            "files": [],
            "id": "BR0255",
            "insuranceSum": 548.60,
            "insuranceSumAutoCalculation": false,
            "isMarketplaceOrder": false,
            "items": [
                {
                    "barcode": "4211125570354",
                    "itemAmountState": {
                        "amountDELIVERED": 1,
                        "amountLOST": 0,
                        "amountORDERED": 1,
                        "amountPACKED": 1,
                        "amountRESERVED": 1,
                        "amountRETURNED": 0,
                        "amountRETURNED_AS_CLAIMS": 0,
                        "amountRETURNED_DEFECTIVE": 0,
                        "amountRETURNED_TO_CLIENT": 0,
                        "amountSHIPPED": 1
                    },
                    "itemDimensions": {
                        "depth": 17,
                        "height": 7,
                        "width": 23
                    },
                    "itemWeight": 167,
                    "name": "Маникюрно-педикюрный набор Beurer MP62 белый",
                    "num": 1,
                    "price": 5000.00,
                    "productId": "1047872",
                    "productVariantCount": 1,
                    "quantity": 1,
                    "quantityAvailable": 0,
                    "skuType": "SKU",
                    "variantId": "1047872",
                    "vatRate": "VAT_20"
                },
                {
                    "barcode": "",
                    "name": "Доставка",
                    "num": 2,
                    "price": 486.00,
                    "quantity": 1,
                    "skuType": "SERVICE",
                    "variantId": "delivery",
                    "vatRate": "NO_VAT"
                }
            ],
            "legalEntity": {
                "id": "fa0d6c85-6e62-51fa-346e-e5433c92b2d8",
                "name": " Розничный покупатель",
                "type": "PERSON"
            },
            "manualDiscount": {
                "appliedDiscountValue": 0,
                "discountType": "FIX",
                "discountValue": 0,
                "isActive": false
            },
            "needCustomerPayment": false,
            "needReserve": true,
            "onlinePaymentSum": 5486.00,
            "operatorComment": "",
            "orderType": "STANDARD",
            "packingOptions": [],
            "packings": [
                {
                    "barcode": "202749561679",
                    "files": [],
                    "items": [
                        {
                            "accountingAttributes": [],
                            "barcode": "4211125570354",
                            "itemDimensions": {
                                "depth": 17,
                                "height": 7,
                                "width": 23
                            },
                            "itemWeight": 167,
                            "name": "Маникюрно-педикюрный набор Beurer MP62 белый",
                            "num": 1,
                            "price": 5000.00,
                            "productId": "1047872",
                            "productVariantCount": 1,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantId": "1047872",
                            "vatRate": "VAT_20"
                        }
                    ],
                    "measurements": {
                        "dimensions": {
                            "depth": 12,
                            "height": 12,
                            "width": 12
                        },
                        "success": true,
                        "weight": 1000
                    }
                }
            ],
            "paymentMethodCode": "cod-card",
            "paymentMethodName": "Оплата картой при получении",
            "paymentMethodType": "COD_CARD",
            "paymentStatus": "NOT_PAID",
            "permissionList": {
                "actionPermissions": [
                    {
                        "type": "CANCEL",
                        "value": false
                    },
                    {
                        "type": "CONFIRM",
                        "value": false
                    },
                    {
                        "type": "NEED_CONFIRM",
                        "value": false
                    },
                    {
                        "type": "PACK",
                        "value": false
                    },
                    {
                        "type": "COPY",
                        "value": true
                    },
                    {
                        "type": "PACK_CONTROL",
                        "value": false
                    },
                    {
                        "type": "UNPACK",
                        "value": false
                    },
                    {
                        "type": "SHIPPING",
                        "value": false
                    },
                    {
                        "type": "UNSHIPPING",
                        "value": false
                    },
                    {
                        "type": "REFRESH_RESERVE",
                        "value": false
                    },
                    {
                        "type": "RETURN_TO_DELIVERY",
                        "value": true
                    },
                    {
                        "type": "REVERT_RETURNS",
                        "value": false
                    },
                    {
                        "type": "DELIVER_SELF_PICKUP",
                        "value": false
                    },
                    {
                        "type": "DELIVER_COURIER",
                        "value": false
                    },
                    {
                        "type": "ACCEPT_RETURN",
                        "value": false
                    }
                ],
                "fieldPermissions": [
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "ITEMS_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "PAYMENT_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "IS_PAID_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "RECEIVER_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "DELIVERY_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "WAREHOUSE_EDITABLE",
                        "value": false
                    },
                    {
                        "reason": "Склад уже отгрузил заказ. Изменение заказа невозможно.",
                        "type": "COMMENTS_EDITABLE",
                        "value": false
                    },
                    {
                        "type": "OPERATOR_COMMENTS_EDITABLE",
                        "value": true
                    }
                ],
                "infoStatus": "ORDER_INFO_DELIVERED"
            },
            "plannedTakeOutDate": "2022-06-01 09:00:00",
            "readyForFFExport": true,
            "shortUrl": "http://r.kak2c.ru/h5llc00",
            "status": "ORDER_INFO_DELIVERED",
            "summaryItemAmountState": {
                "amountDELIVERED": 1,
                "amountLOST": 0,
                "amountORDERED": 1,
                "amountPACKED": 1,
                "amountRESERVED": 1,
                "amountRETURNED": 0,
                "amountRETURNED_AS_CLAIMS": 0,
                "amountRETURNED_DEFECTIVE": 0,
                "amountRETURNED_TO_CLIENT": 0,
                "amountSHIPPED": 1
            },
            "totalOrderSum": 5486.00,
            "updateTs": "2022-05-31 13:13:34.341",
            "warehouseCode": "2b0cde46-043f-cdc9-e2e4-aed4ff5a7d4f",
            "warehouseFFExportError": false,
            "warehouseFFExported": false,
            "warehouseFFSync": false,
            "warehouseName": "BR_K",
            "warehouseShippingOptions": {}
        }
    ],
    "recordsTotal": 2,
    "success": true
}
Заказы

/api/lite/orders/discounts

Добавить скидку для заказа

/api/lite/orders/discounts

Позволяет добавить промокод или фиксированную скидку ко всему заказу в процентах или сумме 

Поле Тип / формат Описание
id string Идентификатор заказа
promocode string Промокод
 manualDiscount object Объект, описывающий скидку
  isActive boolean Флаг активности промокода
discountType enum Тип скидки
FIX Фиксированная
PERCENT в процентах
    discountValue double Сумма скидки или процент

Пример запроса:

{
    "id": "2502-124471",
    "promocode": "",
    "manualDiscount": {
        "isActive": true,
        "discountType": "FIX",
        "discountValue": "1000"
    }
}

Ответ:

{
  "success": true
}

Ошибка:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}

 

Поставка на склад (Заказы поставщику)

Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders

Запрос списка поставок на склад (заказов поставщиков)

/api/lite/purchase_orders

Метод возвращает список заказов с заданной фильтрацией.

Можно использовать как для получения списка, так и единичного заказа.

 

Фильтрация

Для фильтрации есть следующие возможности:

 

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: /api/lite/orders?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

 

Сортировка

Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.

Пример сортировки по дате (возрастание): /api/lite/orders?order=date+asc

Пример сортировки по дате (убывание): /api/lite/orders?order=date+desc

Доступные коды сортировки:

По умолчанию используется сортировка по дате заказа по убыванию.

Полный комплект данных по заказам будет передан только если в запросе будет параметр full_info=true

Точечное описание некоторых полей, которые возвращает запрос по поставкам

purchaseArrivalDate формат 2021-04-02 15:50:48.032 фактическая дата прихода поставки на склад
finishlDate формат 2021-04-02 15:50:48.032  фактическая дата закрытия поставки
date формат 2021-04-02 15:50:48.032  дата создания поставки в лк Кактус
status статус поставки
supplier объект, содержит информацию о поставщике
consignor объект, содержит информацию о грузоотправителе
files список объектов, содержит информацию о файлах в поставке
warehouseName  название склада
warehouseCode код склада
comment комментарий к поставке

 

 

Пример запроса по одному заказу и полными данными:

GET api/lite/purchase_orders?id=1001&full_info=true

Пример результата запроса

{
	"success":true,
	"recordsTotal":1,
	"purchaseOrders":[
		{
			"id":"1001",
			"externalId":"extId",
			"externalId2":"extId2",
			"externalId3":"extId3",
			"externalId4":"extId4",
			"externalId5":"extId5",
			"date":"2021-04-02 15:50:41",
			"updateTs":"2021-04-02 15:50:48.032",
			"status":"COMPLETED",
			"totalOrderSum":0,
			"comment":"",
			"totalQuantity":100,
			"supplier":{
				"id":"da1686cf-0551-db1d-57b9-c04120309fae",
				"type":"PERSON",
				"role":null,
				"name":"Розничный покупатель",
				"organization":null,
				"person":{
					"name":"",
					"surname":"",
					"patronymic":"",
					"fullName":"Розничный Покупатель",
					"phone":"",
					"rawPhone":null,
					"alternativePhone":"",
					"email":null,
					"post":null,
					"personType":null,
					"address":{
						"country":null,
						"countryCode":null,
						"region":null,
						"area":null,
						"city":null,
						"settlement":null,
						"street":null,
						"house":null,
						"block":null,
						"building":null,
						"flat":null,
						"fullAddress":null,
						"fullCity":null,
						"rawData":null,
						"zip":null,
						"regionFias":null,
						"areaFias":null,
						"cityFias":null,
						"settlementFias":null
					}
				}
			},
			"consignor":{
				"id":"11430b37-7f78-1202-f6cf-e4b460d81aca",
				"name":"АО \"АРМАДИЛЛО БИЗНЕС ПОСЫЛКА\"",
				"organization":{
					"address":{
						"area":"ГОРОД МОСКВА",
						"block":"",
						"building":"СТРОЕНИЕ 1",
						"city":"ГОРОД МОСКВА",
						"country":"Russia",
						"countryCode":"RU",
						"flat":"",
						"fullAddress":"",
						"fullCity":"ГОРОД МОСКВА",
						"house":"16",
						"rawData":"",
						"region":"ГОРОД МОСКВА",
						"settlement":"",
						"street":"УЛИЦА ДОКУКИНА",
						"zip":"129226"
					},
					"fullName":"АКЦИОНЕРНОЕ ОБЩЕСТВО \"АРМАДИЛЛО БИЗНЕС ПОСЫЛКА\"",
					"id":"c9066ce2-307b-23db-f22a-f1dcc3742f77",
					"inn":"7713215523",
					"kpp":"771601001",
					"name":"АО \"АРМАДИЛЛО БИЗНЕС ПОСЫЛКА\"",
					"ogrn":"1027739074142",
					"orgLegalType":"COMPANY",
					"phones":"",
					"postalAddress":{
						
					}
				},
				"type":"COMPANY"
			},
			"items":[
				{
					"accountingAttributes":[
						{
							"code":"chestnyznak",
							"n":854,
							"stringValue":"0104064196826017215uHGtegWyMT;<9100BE92w1NTVrrKUOM1Z2waUb04Nt9Ifc+WOJDV9+fQqtZxZf9D8UssJBIsmx/AVzOP9"
						},
						{
							"code":"chestnyznak",
							"n":852,
							"stringValue":"0104064196826017215vhGSFBRSK.r69100BE928MYt2IiDvRzfF1HcG9QxbuwtckYc6d5NlzTwweRuKGVM3tyq+1vx35aKDFhsN"
						}
					],
                  	"article":"1-1-22407-20-508",
					"barcode":"4164196826017",
					"num":1,
					"variantId":"1001",
					"productId":"1001",
					"name":"товар тест 3",
					"quantity":100,
					"quantityFact":100,
					"quantityRaw":100,
					"quantityDefective":0,
					"vatRate":"NO_VAT",
					"price":0,
					"img":"https://storage.yandexcloud.net/images-k2c/05d7a992-1c61-4f39-87c6-1401405055e2.jpg",
					"skuType":"SKU",
					"barcode":"",
					"orderDocId":"5703-1013",
					"batchAccountingAttributes":{
						"useBatchAccounting":true,
						"useExpiration":true,
						"expirationDate":"2022-12-01",
						"productionDate":"2021-01-01",
						"expirationDaysLimit":20,
						"expirationDays":500,
						"batchAccountingNumber":"abcd-01",
						"manufacturer":"ООО Полёт",
						"manufacturerRequisites":"ИНН: 123456789"
					}
				}
			],
			"files":[
				{
					"id":"43f79bac-0d82-2d82-f11d-abd1a53b26a0",
					"fileType":"PDF",
					"fileSource":"FULFILLMENT",
					"fileName":"МХ1",
					"fileExt":"pdf",
					"url":"https://yadi.sk/d/BzKXkRigQZtVnB",
					"printWhenPacking":true,
					"copiesQty":1
				}
			],
			"warehouseName":"Свой склад",
			"warehouseCode":"373b1e28-a6d7-545f-9303-65af3a652d48",
			"confirmStatus":"APPROVED",
			"warehouseFFExported":false,
			"warehouseFFSync":false,
			"currency":"RUB"
		}
	]
}

 

Пример запроса по списку поставок:

GET /api/lite/purchase_orders

Пример результата запроса:

{
  "success": true,
  "recordsTotal": 2,
  "purchaseOrders": [
    {
      "id": "1001",
      "externalId": "extId",
      "externalId2": "extId2",
      "externalId3": "extId3",
      "externalId4": "extId4",
      "externalId5": "extId5",
      "date": "2021-04-02 15:50:41",
      "updateTs": "2021-04-02 15:50:48.032",
      "status": "COMPLETED",
      "totalOrderSum": 0,
      "comment": "",
      "totalQuantity": 100,
      "supplier": {
        "id": "da1686cf-0551-db1d-57b9-c04120309fae",
        "type": "PERSON",
        "role": null,
        "name": "Розничный покупатель",
        "organization": null,
        "person": {
          "name": "",
          "surname": "",
          "patronymic": "",
          "fullName": "Розничный Покупатель",
          "phone": "",
          "rawPhone": null,
          "alternativePhone": "",
          "email": null,
          "post": null,
          "personType": null,
          "address": {
            "country": null,
            "countryCode": null,
            "region": null,
            "area": null,
            "city": null,
            "settlement": null,
            "street": null,
            "house": null,
            "block": null,
            "building": null,
            "flat": null,
            "fullAddress": null,
            "fullCity": null,
            "rawData": null,
            "zip": null,
            "regionFias": null,
            "areaFias": null,
            "cityFias": null,
            "settlementFias": null
          }
        }
      },
      "items": [
        {
          "num": 1,
          "variantId": "1001",
          "productId": "1001",
          "name": "товар тест 3",
          "quantity": 100,
          "quantityFact": 100,
          "quantityRaw": 100,
          "quantityDefective": 0,
          "vatRate": "NO_VAT",
          "price": 0,
          "img": "https://storage.yandexcloud.net/images-k2c/05d7a992-1c61-4f39-87c6-1401405055e2.jpg",
          "skuType": "SKU",
          "barcode": "",
          "orderDocId": "5703-1013"
        }
      ],
      "files": [
                {
                    "id": "43f79bac-0d82-2d82-f11d-abd1a53b26a0",
                    "fileType": "PDF",
                  	"fileSource": "FULFILLMENT", //ESHOP | USER
                    "fileName": "МХ1",
                    "fileExt": "pdf",
                    "url": "https://yadi.sk/d/BzKXkRigQZtVnB",
                    "printWhenPacking": true,
                    "copiesQty": 1
                }
           	 ],
      "warehouseName": "Свой склад",
      "warehouseCode": "373b1e28-a6d7-545f-9303-65af3a652d48",
      "confirmStatus": "APPROVED",
      "warehouseFFExported": false,
      "warehouseFFSync": false,
      "currency": "RUB"
    },
    
    {
      "id": "1002",
      "date": "2021-04-03 15:50:41",
      "updateTs": "2021-04-02 15:50:48.032",
      "status": "COMPLETED",
      "totalOrderSum": 0,
      "comment": "",
      "totalQuantity": 100,
      "supplier": {
        "id": "da1686cf-0551-db1d-57b9-c04120309fae",
        "type": "PERSON",
        "role": null,
        "name": "Розничный покупатель",
        "organization": null,
        "person": {
          "name": "",
          "surname": "",
          "patronymic": "",
          "fullName": "Розничный Покупатель",
          "phone": "",
          "rawPhone": null,
          "alternativePhone": "",
          "email": null,
          "post": null,
          "personType": null,
          "address": {
            "country": null,
            "countryCode": null,
            "region": null,
            "area": null,
            "city": null,
            "settlement": null,
            "street": null,
            "house": null,
            "block": null,
            "building": null,
            "flat": null,
            "fullAddress": null,
            "fullCity": null,
            "rawData": null,
            "zip": null,
            "regionFias": null,
            "areaFias": null,
            "cityFias": null,
            "settlementFias": null
          }
        }
      },
      "items": [
        {
          "num": 1,
          "variantId": "1001",
          "productId": "1001",
          "name": "товар тест 3",
          "quantity": 100,
          "quantityFact": 100,
          "quantityRaw": 100,
          "quantityDefective": 0,
          "vatRate": "NO_VAT",
          "price": 0,
          "img": "https://storage.yandexcloud.net/images-k2c/05d7a992-1c61-4f39-87c6-1401405055e2.jpg",
          "skuType": "SKU",
          "barcode": ""
        }
      ],
      "files": [
                {
                    "id": "43f79bac-0d82-2d82-f11d-abd1a53b26a0",
                    "fileType": "PDF",
                  	"fileSource": "FULFILLMENT", //ESHOP | USER
                    "fileName": "МХ1",
                    "fileExt": "pdf",
                    "url": "https://yadi.sk/d/BzKXkRigQZtVnB",
                    "printWhenPacking": true,
                    "copiesQty": 1
                }
           	 ],
      "warehouseName": "Свой склад",
      "warehouseCode": "373b1e28-a6d7-545f-9303-65af3a652d48",
      "confirmStatus": "APPROVED",
      "warehouseFFExported": false,
      "warehouseFFSync": false,
      "currency": "RUB"
    }
  ]
}

 

Возможные статусы заказа:
NEW
READY_TO_TAKE_IN
TAKE_IN_PROCESS
COMPLETED
COMPLETED_WITH_DIFFERENCE
DIFFERENCE
CANCELED

Создание/редактирование поставки (заказа поставщику)

/api/lite/purchase_orders

Создание/редактирование заказа для кабинета.

Если указан параметр id - то система будет пробовать найти заказ с указанным номером и отредактировать его, иначе - создаст новый с указанным id.

Если параметр id не указан - система создаст новый заказ и присвоит внутренний номер.

 

Поле Тип Обязательный Комментарий
warehouseCode string да Код склада на который будет поставка, из справочника складов аккаунта
supplier Объект да Данные о поставщике из справочника контрагентов аккаунта
supplier.id string да

Код контрагента-поставщика из справочника контрагентов аккаунта.
Также можно использовать внешний код контрагента. Для этого нужно передавать его в поле extId. В таком случае поле id можно уже не передавть.

consignor Объект нет Данные о грузоотправителе из справочника контрагентов аккаунта
consignor.id string нет Код контрагента-грузоотправителя из справочника контрагентов аккаунта
items Объект да Список позиций поставки
items.num integer да Номер строки (последовательно с 1, без пропусков)
items.quantity integer да Количество товара (более 0)
items.price money да Цена за шт
items.vatRate

enum

Значения: NO_VAT,

VAT_0, VAT_10, VAT_20

да Ставка НДС
items.variantId string да (если настроен поиск по этому полю) Код товара в аккаунте 
items.variantExtId string да (если настроен поиск по этому полю) Внешний код товара в аккаунте 
searchColumnType enum:
HUMANID - дефолтный, можно не передавать, если не требуется другой,
EXTID,
ARTICLE,
BARCODE
Обязательный, если нужен поиск не по variantId  
items.orderDocId string нет Для согласованных кроссдок поставок - номер привязанного заказа
items.batchAccountingAttributes Объект нет Атрибуты партии для данного товара
confirmStatus

enum 
Значения: APPROVED, NEED_CONFIRM, 

CANCELED

нет Статус подтверждения. Только если статус = APPROVED - поставка выгружается на склад для приемки.
comment string нет Комментарий к поставке для склада
dateOfDeliveryPlan DateTime нет Ориентровочная дата поступления поставки
externalId - externalId5 string нет Внешние коды поставки из клиенстких систем

Пример запроса:

{
  "id": "1001",
  "items": [
    {
      "num": 1,
      "variantId": "demo1024",
      "productId": "demo1006",
      "productExtId": null,
      "name": "Компьютер (демо товар) ",
      "quantity": 3,     
      "price": 20000,
      "vatRate": "NO_VAT",    
      "orderDocId": "5703-1013",
       "batchAccountingAttributes": {
        "useBatchAccounting": true,
        "useExpiration": true,
        "expirationDate": "2022-12-01",
        "productionDate": "2021-01-01",
        "expirationDaysLimit": 20,
        "expirationDays": 500,
        "batchAccountingNumber": "abcd-01",
        "manufacturer": "ООО Полёт",
        "manufacturerRequisites":"ИНН: 123456789"
      }
    }
  ],
  "warehouseCode": "373b1e28-a6d7-545f-9303-65af3a652d48", 
  "supplier": {
    "id": "da1686cf-0551-db1d-57b9-c04120309fae"
  },
  "dateOfDeliveryPlan": "2021-10-08 00:00:00",
  "comment": "",
  "confirmStatus": "APPROVED",
  "externalId": "extId",
  "externalId2": "extId2",
  "externalId3": "extId3",
  "externalId4": "extId4",
  "externalId5": "extId5"
}

 

В ответ возвращается:

{
    "success": true,
    "orderId": "111",
    "c": "2b92b631-7f1b-c52a-897e-30bc628f87e5"
}

 

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/history

Получение истории по заказу поставщика

/api/lite/purchase_orders/history

Возвращает историю событий по указанному заказу.

Обязательный параметр: id заказа

 

Пример ответа:

{
    "success": true,
    "events": [
        {
     
            "type": "Документы",
            "subType": "Изменения заказа",
            "orderDocStage": "Новый",
            "eventDate": "2020-01-31 10:12:51.128",
            "description": "",
            "changeSource": "Пользователь",
            "userLogin": "sale@djbag.ru-expert",
            "id": "f258808b-a3ee-ccf6-9d1b-30198f94166c",
            "level": "INFO",
            "eventParameters": null
        },
        {
            "type": "Документы",
            "subType": "Изменения заказа",
            "orderDocStage": "Новый",
            "eventDate": "2020-01-31 10:35:55.144",
            "description": "",
            "changeSource": "Пользователь",
            "userLogin": "sale@djbag.ru-expert",
            "id": "94dc3974-f558-239f-c1c4-72b2906120c4",
            "level": "INFO",
            "eventParameters": null
        }
    ]
}

 

Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/confirm

Заказ - подтверждение

/api/lite/purchase_orders/confirm

Проставление статуса Подтверждения у заказа.

Пример запроса:

{ 
    "id":"1234",
    "confirmStatus": "APPROVED" // HOLD/CANCELED/NEED_CONFIRM
}        

В ответ возвращается

Успех:

{
    "success": true,
    "confirmStatus": "APPROVED" // HOLD/CANCELED 
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/accept_diff

Заказ - подтверждение

/api/lite/purchase_orders/accept_diff

Проставление флага согласия с рахождениями приемки

Пример запроса:

{ 
    "id":"1234",
    "accept": true  // false
}

В ответ возвращается

Успех:

{
    "success": true,
    "accept": true   // false
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/set_in_process

Заказ - вернуть в обработку (свой склад)

/api/lite/purchase_orders/set_in_process

Для принятого или отмененного заказа - вернуть на приемку. Убирает с хранения все ранее принятые позиции

Пример запроса:

{ 
    "id":"1234"   
}

В ответ возвращается

Успех:

{
    "success": true,
    "id":"1234"   
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/completed

Заказ - завершить приемку (свой склад)

/api/lite/purchase_orders/set_in_process

Для заказа по своему складу где есть ранее сформированный приходный ордер - завершает его приемку и добавляет товар на хранение

Пример запроса:

{ 
    "id":"1234"   
}

В ответ возвращается

Успех:

{
    "success": true,
    "id":"1234"   
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/items/fact

Заказ - задать число принятых товаров (свой склад)

/api/lite/purchase_orders/items/fact

Для заказа на своем складе - простановка количества товаров в приемке перед закрытием

Пример запроса:

 {
    "id": "1005",
    "items": [
    {
      "num": 1,
      "variantId": "1003", 
      "quantityRaw": 2,
      "vatRate": "NO_VAT",
      "price": 123
    },
      {
      "num": 2,
      "variantId": "1000", 
      "quantityRaw": 3,
      "vatRate": "NO_VAT",
      "price": 123
    }
  ]
 }

В ответ возвращается

Успех:

{
    "success": true,
    "id": "1005"
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/file

/api/lite/purchase_orders/file

Добавляет файл к заказу.

Параметры передаются как form-data:

upfile Файл для загрузки
id Идентификатор заказа (humanId)
print_when_packing Печатать при упаковке
copies_qty Кол-во копий

Пример ответа:

{
    "success": true,
    "id": "b233372d-cf7b-f07b-446b-128912be7c8a",
    "fileType": "JPG",
    "fileName": "IMG_20200822_101244",
  	"fileSource": "USER", //ESHOP | FULFILLMENT
    "fileExt": "jpg",
    "url": "https://storage.yandexcloud.net/order-files-kak2c/d0f03942-8d75-4456-93af-42ec518ef0a9.jpg",
    "printWhenPacking": false,
    "copiesQty": 1
}

 

/api/lite/purchase_orders/file

Удаляет файл

В параметре id передается идентификатор файла.

Пример запроса:

DELETE https://app.kak2c.ru/api/lite/purchase_orders/file?id=b233372d-cf7b-f07b-446b-128912be7c8a

Пример ответа:

{
  "success": true
}
Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/file/edit

/api/lite/purchase_orders/file/edit

Пример запроса:

{
    "id": "b9e3efdd-455e-af10-996f-2cf6f03d9775",
    "copiesQty": 2,
    "printWhenPacking": true
}

Пример ответа:

{
    "success": true
}
Поставка на склад (Заказы поставщику)

/api/lite/purchase_orders/history/status

Получение истории смены статусов по заказу поставщика

/api/lite/purchase_orders/history/status

Возвращает историю смены статуса по указанному заказу поставщика

Обязательный параметр: id заказа

 

Пример ответа:

{
    "items": [
        {
            "date": "2023-07-18 12:31:13.960",
            "infoStatus": "COMPLETED"
        },
        {
            "date": "2023-07-18 12:31:09.973",
            "infoStatus": "TAKE_IN_PROCESS"
        },
        {
            "date": "2023-07-18 12:30:19.438",
            "infoStatus": "READY_TO_TAKE_IN"
        },
        {
            "date": "2023-07-18 12:29:58.319",
            "infoStatus": "TAKE_IN_PROCESS"
        },
        {
            "date": "2023-07-18 12:29:48.458",
            "infoStatus": "COMPLETED_WITH_DIFFERENCE"
        },
        {
            "date": "2023-07-18 12:29:36.275",
            "infoStatus": "TAKE_IN_PROCESS"
        },
        {
            "date": "2023-07-18 12:29:29.321",
            "infoStatus": "READY_TO_TAKE_IN"
        },
        {
            "date": "2023-07-18 12:29:28.835",
            "infoStatus": "TAKE_IN_PROCESS"
        },
        {
            "date": "2023-07-18 12:29:00.708",
            "infoStatus": "READY_TO_TAKE_IN"
        },
        {
            "date": "2023-07-18 12:28:37.077",
            "infoStatus": "COMPLETED"
        },
        {
            "date": "2023-07-18 12:28:31.183",
            "infoStatus": "TAKE_IN_PROCESS"
        },
        {
            "date": "2023-07-18 12:01:48.748",
            "infoStatus": "READY_TO_TAKE_IN"
        }
    ],
    "success": true
}

 

Отгрузка заказов

Отгрузка заказов

/api/lite/pickup_dates

Информация о возможных датах приезда курьера

/api/lite/pickup_dates

Возвращает информацию о ближайших возможных датах приезда курьера в указанный период.

Запрос:

Параметр Тип\формат Описание

from

date Дата, начиная с которой идет поиск плановых дат приезда курьера. Включительно.

to

date

Дата, по которую идет поиск плановых дат приезда курьера. Включительно.

Результат запроса:

Параметр Тип\формат Описание

dates

array

Массив dates содержит только даты, в которые можно запланировать приезд курьера.

Пример результата запроса:

{
    "success": true,
    "dates": [
        {
            "date":"2019-01-09",
            "planned": true,
            "intervals":[
                {          
                    "readableTimeInterval": "Весь день",   
                    "startDateTime":  "2018-02-22T09:00:00",               
                    "startTimeHour": 9,
                    "startTimeMinute": 0,      
                    "finishDateTime":  "2018-02-22T18:00:00",          
                    "finishTimeHour": 18,
                    "finishTimeMinute": 0,
                    "planned": true                
                },
                {          
                    "readableTimeInterval": "9 - 14",  
                    "startDateTime":  "2018-02-22T09:00:00",               
                    "startTimeHour": 9,
                    "startTimeMinute": 0,      
                    "finishDateTime":  "2018-02-22T14:00:00",          
                    "finishTimeHour": 14,
                    "finishTimeMinute": 0,
                    "planned": false
                }
            ]
        }
    ]
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Отгрузка заказов

/api/lite/pickup_dates/planned

Информация о запланированных датах приезда курьера

/api/lite/pickup_dates/planned

Возвращает информацию о всех запланированных датах приезда курьера - как будущих так и прошлых.

Результат отсортирован по датам начиная с самой свежей.

Результат запроса:

{
    "success": true,
    "dates": [
        {
            "date":"2019-01-09",
            "planned": true,
            "intervals":[
                {          
                    "readableTimeInterval": "Весь день",   
                    "startDateTime":  "2018-02-22T09:00:00",               
                    "startTimeHour": 9,
                    "startTimeMinute": 0,      
                    "finishDateTime":  "2018-02-22T18:00:00",          
                    "finishTimeHour": 18,
                    "finishTimeMinute": 0,
                    "planned": true
                },
                {          
                    "readableTimeInterval": "9 - 14",  
                    "startDateTime":  "2018-02-22T09:00:00",               
                    "startTimeHour": 9,
                    "startTimeMinute": 0,      
                    "finishDateTime":  "2018-02-22T14:00:00",          
                    "finishTimeHour": 14,
                    "finishTimeMinute": 0,
                    "planned": false                   
                }
            ]
        }
    ]
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Отгрузка заказов

/api/lite/takeout_list

Получение перечня реестров отгрузки

/api/lite/takeout_list

Возвращает информацию о созданных реестрах отгрузки по данному клиенту.

Запрос:

Параметр

 

Тип\формат Описание

date_from

date Дата, начиная с которой идет поиск реестров. Включительно. (необязательный)

date_to

date

Дата, по которую идет поиск реестров. Включительно.

(необязательный)

id String Номер конкретного реестра  (необязательный)
page Integer Страница (необязательный)
size Integer Число элементов на странице (необязательный)
order String Поле для сортировки (необязательный)

Результат запроса:

{   
    
    "success": true,
    "recordsTotal": 59,
    "takeoutLists": [
        {
            "id": "1069",
            "date": "2020-04-16 22:34:30",
            "updateTs": "2020-04-16 23:21:03.435",
            "status": "SHIPPED",
            "orders": [
                {
                    "id": "3318-1166",
                    "date": "2020-04-11",
                    "customer": "Караваева Елена Олеговна"
                }
            ],
            "takeoutDate": "2020-05-10",
            "takeoutHourStart": "14:00",
            "takeoutHourEnd": "18:00",
            "gatherTrackingNum": "100065493",
            "gatherType": "COURIER", // SELF_PICKUP
            "gatherStatus": "AWAITING_CARGO", //CREATED, CARGO_SHIPPED, HOLD, CANCELED
            "warehouseName": "Свой склад",
            "warehouseCode": "776069fa-f578-9ceb-e773-db7b89968b5f",
            "deliveryCode": "ae12b4f1-c8e5-aa52-0a68-9d102d4624fe",
            "deliveryTitle": "Global Delivery",
            "gatherType": "COURIER",
            "comment": "комментарий",
            "availableForChanges": false,
            "warehouseManager": {
                "name": "Склада",
                "surname": "Менеджер",
                "patronymic": "",
                "fullName": "Осман Идракович Кишиев ",
                "phone": "+79264642812",
                "rawPhone": "+7 (926) 464 28 12",
                "alternativePhone": "",
                "email": "Info@mossmore.ru",
                "post": null,
                "personType": null
            }
        },
        {
            "id": "1067",
            "date": "2020-04-11 17:00:09",
            "updateTs": "2020-04-11 17:46:35.009",
            "status": "SHIPPED",
           "orders": [
                {
                    "id": "3318-1167",
                    "date": "2020-04-12",
                    "customer": "Караваева Елена Олеговна"
                }
            ],
            "takeoutDate": "2020-05-10",
            "takeoutHourStart": "09:00",
            "takeoutHourEnd": "14:00",
            "gatherTrackingNum": "100065493",
            "gatherType": "COURIER",
            "gatherStatus": "AWAITING_CARGO",
            "warehouseName": "Свой склад",
            "warehouseCode": "776069fa-f578-9ceb-e773-db7b89968b5f",
            "deliveryCode": "ae12b4f1-c8e5-aa52-0a68-9d102d4624fe",
            "deliveryTitle": "Global Delivery",
            "gatherType": "COURIER",
            "warehouseManager": {
                "name": "Склада",
                "surname": "Менеджер",
                "patronymic": "",
                "fullName": "Осман Идракович Кишиев ",
                "phone": "+79264642812",
                "rawPhone": "+7 (926) 464 28 12",
                "alternativePhone": "",
                "email": "Info@mossmore.ru",
                "post": null,
                "personType": null
            }
        }
    ]
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Создание/редактирование реестра отгрузки

/api/lite/takeout_list

Создает или редактирует (при наличии параметра id) реестр отгрузки

Пример запроса:

{          
            "id": "1069",           
            "orders": [
                {
                    "id": "3318-1166"                   
                },
                {
                    "id": "3318-1167"                   
                }
            ],
            "takeoutDate": "2020-05-10",
            "takeoutHourStart": "14:00",
            "takeoutHourEnd": "18:00",
            "warehouseName": "Свой склад",
            "warehouseCode": "776069fa-f578-9ceb-e773-db7b89968b5f",          
            "gatherType": "COURIER",
            "comment": "комментарий"  
}

Результат: 

{
"success": true,
"id": "1069"
"errors": []
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Удаление/отмена реестра отгрузки

/api/lite/takeout_list

Отменяет реестр отгрузки, все отправления в нем исключаются из реестра.

Пример запроса:

{          
     "id": "1069"
}

Результат: 

{
"success": true,
"id": "1069",
"errors": []
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Получение ошибок выгрузки по реестру отгрузки

/api/lite/takeout_list/commit-errors

Параметр: id реестра

Результат: 

{
"success": true,
"id": "1069",
"warnings": [
    "3318-1167: Некорректные данные получателя"
]
"errors": []
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Отгрузка заказов

/api/lite/takeout_list/print

Получение печатной формы реестра отгрузки

/api/lite/takeout_list/print

/api/lite/takeout_list/print?id=[ид отгрузки]&form=act

Получение печатной формы в pdf для указанного реестра отгрузки 

Параметры: id - номер реестра

form - вид печатной формы, по умолчанию "act"

Например:

/api/lite/takeout_list/print?id=1234&form=act

Печатная форма возвращается в формате base64.

Успех:

{
  "success": true, 
  "content" : "base64data"
     
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

Настройки аккаунта

Настройки аккаунта

/api/lite/pub/settings/checkout

Получение настроек работы виджета чекаута (публичный)

/api/lite/pub/settings/checkout

Метод возвращает настройки виджета чекаута

В ответ возвращается

Успех:

{
    "success": true,
  	"freeDeliveryAmount": 400.00,
    "freeDeliveryRegion": "RU", // RU_SNG, ALL
    "findByExtID": false,
    "paymentMethods": [
        {
            "code": "no-cod",
            "name": "Предоплата",
          	"method": "NO_COD",
            "isDiscountActive": true,
            "discountType": "PERCENT",
            "discountValue": 10,
            "minApplyValue": 1000
        },
        {
            "code": "cod-card",
            "method": "COD_CARD",
            "name": "Оплата картой курьеру",
            "isDiscountActive": false
        },
        {
            "code": "cod-cash",
            "method": "COD_CASH",	
            "name": "Оплата наличными курьеру",
            "isDiscountActive": false,
            "discountType": "FIX",
            "discountValue": 50
        }
    ],
    "promocodesAllowed": true,
    "defaultVAT": "VAT_20",
    "uiRequiredFields": [
        "PHONE",
        "EMAIL"
    ],
    "onlySufficientOffers": true,
    "paymentProvider": "PAYU",  // "YANDEX", "ROBOKASSA"
    "policyCheckEnabled": true,
    "personalInfoPolicyLink": "http://example.link",
    "confidentialPolicyLink": "http://example.link",
   	"country": "RU",
    "currency": "RUB",
  	"successRedirectUrl": "http://example.link",
    "customersRegistrationEnabled": false,
  	"showConsentToNewsletter": true
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Настройки аккаунта

/api/lite/settings/organization

Получение настроек организации аккаунта

/api/lite/settings/organization

Пример ответа:

{  
  "success": true,
  "organization": {
    "success": true,
    "inn": "123",
    "ogrn": "123",
    "kpp": "1213",
    "bik": "123",
    "bankName": "ПАО Сбербанк",
    "bankAccountNum": "123",
    "bankCorrNum": "123",
    "name": "ООО «Продакшн»",
    "fullName": "Общество с ограниченной ответственностью «Продакшн»",
    "phones": "234343",
    "email": "",
    "address": {
      "country": "Россия",
      "countryCode": "RU",
      "region": "Москва",
      "area": null,
      "city": "Москва",
      "settlement": null,
      "street": "ул один",
      "house": "4Б",
      "block": "",
      "building": "",
      "flat": null,
      "fullAddress": "Москва, ул один, д 4Б",
      "fullCity": null,
      "rawData": null,
      "zip": "117405",
      "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "areaFias": null,
      "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "settlementFias": null
    },
    "postalAddress": {
      "country": "Россия",
      "countryCode": "RU",
      "region": "Москва",
      "area": null,
      "city": "Москва",
      "settlement": null,
      "street": "ул один",
      "house": "4Б",
      "block": "",
      "building": "",
      "flat": null,
      "fullAddress": "Москва, ул оодин, д 4Б",
      "fullCity": null,
      "rawData": null,
      "zip": "117405",
      "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "areaFias": null,
      "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "settlementFias": null
    },
    "persons": [
      {
        "name": null,
        "surname": null,
        "patronymic": null,
        "fullName": "Ирина Борисовна Мельник",
        "phone": "",
        "rawPhone": null,
        "alternativePhone": "",
        "email": null,
        "post": "Генеральный директор",
        "personType": "CHIEF"
      },
      {
        "name": null,
        "surname": null,
        "patronymic": null,
        "fullName": "",
        "phone": "",
        "rawPhone": null,
        "alternativePhone": "",
        "email": null,
        "post": "",
        "personType": "DELIVERY_RESPONSIBLE"
      }
    ],
    "shopUrl": "http://theroadwear.com/",
    "vat": -1,
    "needFulfillment": true,
    "archiveUrl": "",
    "orgLegalType": "ZAO",
    "orgRegisterDate": "2005-01-01",
    "equalAddresses": true
  }
}

 

Редактирование настроек организации аккаунта

/api/lite/settings/organization

 

Пример запроса:

{
  "organization": {
    "inn": "12345",
    "ogrn": "6789",
    "kpp": "66666",
    "bik": "777777",
    "bankName": "ПАО СБЕРБАНК г. Москва",
    "bankAccountNum": "12345",
    "bankCorrNum": "6789",
    "name": "My Shop",
    "fullName": "Индивидуальный предприниматель Иванов Иван Иванович",
    "phones": "7(495)111 11 11",
    "email": "info@myshop.ru",
    "address": {
      "country": "Russia",
      "countryCode": "RU",
      "region": "Москва",
      "area": null,
      "city": "Москва",
      "settlement": null,
      "street": "Полянка",
      "house": "1",
      "block": "1",
      "building": null,
      "flat": "1",
      "fullAddress": "Москва, Полянка, д 1, к 1, кв 1.",
      "fullCity": null,
      "rawData": null,
      "zip": null,
      "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "areaFias": null,
      "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "settlementFias": null
    },
    "postalAddress": {
      "country": "Russia",
      "countryCode": "RU",
      "region": "Москва",
      "area": null,
      "city": "Москва",
      "settlement": null,
      "street": "Полянка",
      "house": "1",
      "block": "1",
      "building": null,
      "flat": "1",
      "fullAddress": "Москва, Полянка, д 1, к 1, кв 1.",
      "fullCity": null,
      "rawData": null,
      "zip": null,
      "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "areaFias": null,
      "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "settlementFias": null
    },
    "persons": [
      {
        "fullName": "Петров Петр Петрович",
        "post": "ГЕНЕРАЛЬНЫЙ ДИРЕКТОР/ ГЛАВНЫЙ БУХГАЛТЕР",
        "personType": "CHIEF"
      },
      {
        "fullName": "Сидоров Иван Иванович",
        "post": "",
        "phone": "+79261111111",
        "personType": "DELIVERY_RESPONSIBLE"
      }
    ],
    "shopUrl": "myshop.ru",
    "vat": -1,
    "needFulfillment": false,
    "orgLegalType": "ZAO",
    "orgRegisterDate": "2005-01-01",
    "archiveUrl": "https://yadi.sk/d/testlink"
  }
}

В ответ возвращается:

{
"success": true

}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Настройки аккаунта

/api/lite/settings/catalog

Получение текущего основного каталога

/api/lite/settings/catalog/default

Пример успешного ответа:

{
  "success": true,
  "name": "Каталог 1",
  "code": "1000",
  "items": [
    {
    "title": "Смартфоны iPhone",
    "code": null,
    "collectionId": "1026",
    "defaultImage": "https://items.s1.citilink.ru/811882_v03_s.jpg",
    "items": null
    }
]
}

 

Получение всех каталогов пользователя

/api/lite/settings/catalog

Пример успешного ответа:

{
"success": true,
"catalogs": [
  {
  "success": true,
  "name": "Каталог 1",
  "code": "1000",
  "items": [
    {
    "title": "Смартфоны iPhone",
    "code": null,
    "collectionId": "1026",
    "defaultImage": "https://items.s1.citilink.ru/811882_v03_s.jpg",
    "items": null
    }
  ]
  }
]
}

 

Создание, Обновление каталога

/api/lite/settings/catalog

Создает/обновляет каталог по его коду. 

Пример запроса:

{
  "name": "Каталог 1",
  "code": "1000",
  "items": [
    {
      "title": "Смартфоны iPhone",
      "code": "1002",
      "collectionId": "1026",
      "defaultImage": "https://items.s1.citilink.ru/811882_v03_s.jpg",
      "items": null
    }
  ]
}
Настройки аккаунта

/api/lite/settings/checkout

Получение настроек работы виджета чекаута

/api/lite/settings/checkout

Метод возвращает настройки виджета чекаута

orderSumMoreThan - наценка/скидка применится только от суммы заказа свыше суммы параметра.

В ответ возвращается

успех:

{
    "success": true,
    "deliveryPremiumType": "PERCENT",
    "importOrderType": "APPROVED",
    "insurancePercent": 100,
    "freeDeliveryAmount": null,
    "freeDeliveryRegion": "RU", // RU_SNG, ALL
    "ownCourierTariff": null,
    "selfPickupTariff": null,
    "merchantId": null,
    "accountSecret": null,
    "ipnUrl": null,
  	"additionalIpnFailUrl": null,  // только для Робокассы
  	"additionalIpnSuccessUrl": null, // только для Робокассы
    "findByExtID": false, - режим поиска по ExtId
    "defaultCity": null,
    "paymentMethods": [
        {
            "code": "no-cod",
            "name": "Предоплата",
            "method": "NO_COD",
            "isDiscountActive": true,
            "discountType": "PERCENT",
            "discountValue": 10,
            "minApplyValue": 1000
        },
        {
            "code": "cod-card",
            "method": "COD_CARD",
            "name": "Оплата картой курьеру",
            "isDiscountActive": false
        }
    ],
    "promocodesAllowed": null,
    "defaultVAT": "VAT_20",
    "uiRequiredFields": [
        "PHONE",
        "EMAIL"
    ],
    "onlySufficientOffers": true,
    "disableCodSumInTariff": false, //Не учитывать тариф за наложку в сумме доставки
	"disableInsuranceSumInTariff": false, //Не учитывать тариф за страховку в сумме доставки
    "paymentProvider": "PAYU"  // "YANDEX", "ROBOKASSA",
	"paymentWithoutCommission": false,
    "defaultDeliveryServiceOptions": { // Услуги доставки, включенные у заказа по умолчанию. Если они не заданы, поле не отображается
        "GLOBAL_DELIVERY": "TRYING;PARTIAL_DELIVERY",
        "PICKPOINT": "PARTIAL_DELIVERY; TRYING; CHECK_CONTENT; PERSONALLY_IN_HANDS; DANGEROUS_CARGO; VERIFY; REVERSE"
    },
    "commercialAccount": true,
    "commercialAccountRequested": false,
    "isJurClient": null,
    "isPostfactumPaymentMode": null,
    "isContractOk": null,
    "accountantEmail": null,
    "allowSNG": null,
    "isSelfPpz": null,
    "disableCodSumInTariff": false,
    "disablePRRInTariff": false,
    "cdekSelfPpz": null,
    "orderSubType": null,
    "catalogCode": "1000",
    "defaultVAT": null,
    "policyCheckEnabled": true,
    "personalInfoPolicyLink": "http://example.link",
    "confidentialPolicyLink": "http://example.link",
 	"country": "RU",
    "currency": "RUB",
	"successRedirectUrl": "http://example.link",
    "customersRegistrationEnabled": false,
	"unlockOrderDuringOnlinePayment": false,
	"showConsentToNewsletter": true,
	"reserveAfterPayment": true,
	"showDeliveryOptions": true,
	"deliveryRegionSettings": {
        "commonSettings": [
            {
                "country": "RU",
                "region": "MOSCOW",
                "extraFeeFixValue": 100,
                "extraFeePercentValue": 0,  
                "orderSumMoreThan": 22000.00,
                "enabled": false,
                "tariffEnabled": true
            },
            {
                "country": "ALL",
                "region": "ALL_REGIONS",
                "extraFeeFixValue": 100,
                "extraFeePercentValue": -50,  
                "orderSumMoreThan": 22000.00,
                "enabled": true,
                "tariffEnabled": true
            },
            {
                "country": "SNG",
                "region": "ALL_REGIONS",
                "extraFeeFixValue": 100,
                "extraFeePercentValue": 0,     
                "orderSumMoreThan": 22000.00,
                "enabled": true,
                "tariffEnabled": true
            }
        ]
    }
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Сохранение настроек работы виджета чекаута

/api/lite/settings/checkout

Запись/обновление настроек чекаута

Запрос:

{   
    "deliveryPremiumAmount": 15.3, - размер наценки в процентах, дробное число в диапазоне [-100; +бесконечность]
    "deliveryPremiumFixAmount": 20 - - размер наценки в процентах, дробное число, можно применять как отдельно от deliveryPremiumAmount, так и               совместно
    "importOrderType": "NEED_CONFIRM", - загружать ли заказ подтверждённым? "APPROVED" | "NEED_CONFIRM"
    "insurancePercent": 100, - процент от суммы товаров для расчета страховой стоимости, дробное число, в диапазоне [0; 100]
    "freeDeliveryAmount": 1500, - сумма заказа для бесплатной доставки, если задана - то не менее 0
	"freeDeliveryRegion": "RU", - регион действия бесплатной доставки. "RU" | "RU_SNG" | "ALL"
    "ownCourierTariff": 150 - тариф на доставку своими курьерами, null -если доставки своими курьерами нет
    "selfPickupTariff": 200,  - тариф на самовывоз, null - если самовывоза нет
     "paymentMethods": [
        {
            "code": "no-cod",
            "name": "Предоплата",
            "isDiscountActive": true,
            "discountType": "PERCENT",
            "discountValue": 10,
            "minApplyValue": 1000
        }
    ],
    "findByExtID": true, - режим поиска по ExtId, (дублирование /api/lite/settings/offer-id-type)
    "defaultCity" : "Москва",
    "uiRequiredFields": ["PHONE", "EMAIL"], - перечень полей для которых чекаут должен включить обязательную валидацию непустого значения
    "onlySufficientOffers": true, - флаг для запрета покупки товаров без остатков
    "disableCodSumInTariff": false, //Не учитывать тариф за наложку в сумме доставки
	"disableInsuranceSumInTariff": false, //Не учитывать тариф за страховку в сумме доставки
    "paymentProvider": "PAYU",  // "YANDEX", "ROBOKASSA"    - подключенный провайдер эквайринга
 	"paymentWithoutCommission": false,
    //необязательный параметр. Услуги доставки, включенные у заказа по умолчанию. Ключ - внешний код службы доставки, например "PICKPOINT".
    //Значение - (DeliveryServiceOption) строковое перечисление с разделителем ";". Может быть переопределён, если передать значение deliveryServiceOptions в методе /api/lite/pub/order
    "defaultDeliveryServiceOptions": {
        "GLOBAL_DELIVERY": "TRYING;PARTIAL_DELIVERY",
        "PICKPOINT": "PARTIAL_DELIVERY; TRYING; CHECK_CONTENT; PERSONALLY_IN_HANDS; DANGEROUS_CARGO; VERIFY; REVERSE"
    },
    "catalogCode": "1005", - номер каталога, который станет основным
    "policyCheckEnabled": true,
    "personalInfoPolicyLink": "http://example.link",
    "confidentialPolicyLink": "http://example.link",
 	"country": "RU",
    "currency": "RUB",
	"successRedirectUrl": "http://example.link", 
    "customersRegistrationEnabled" : true - включение авторегистрации покупателей ,
	"unlockOrderDuringOnlinePayment" : false,
	"showConsentToNewsletter": true,
	"reserveAfterPayment": true,
	"showDeliveryOptions": true
}

В ответ возвращается

успех:

{
"success": true
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Настройки аккаунта

/api/lite/settings/counteragents

Получение перечня контрагентов

/api/lite/settings/counteragents

Возвращает перечень контрагентов по роли или по id

Параметры запроса: id - для загрузки одного контрагента. иначе загружаются все контрагенты аккаунта

extId - для загрузки одного контрагента с заданным внешним ID.

query - строка для поиска по наименованию, ИНН, ОГРН по включению

Паджинация стандартная: page, size (10 элементов по умолчанию)

примеры:

/api/lite/settings/counteragents?id=1647656c-080a-d01b-e2c4-362961f07e18

Виды контрагентов для поля role: CUSTOMER, FULFILLMENT_SERVICE, DELIVERY_SERVICE, CALLCENTER_SERVICE, PRODUCT_SUPPLIER

Пример успешного ответа:

{     
    "success": true,
    "recordsTotal": 3,
    "counteragents": [
         {
            "id": "c82e2616-91e7-702e-d666-320534119a13",
            "extId": "externalSystemID-123",
            "type": "COMPANY",
            "role": "PRODUCT_SUPPLIER",
            "name": " ИП Петров А.В.",
            "organization": {
                "id": "f23b14bf-1151-dcb5-1b25-57a2b931e3ac",
                "name": "ИП Петров А.В.",
                "fullName": "ИП Петров А.В.",
                "phones": null,
                "inn": "5018081484",
                "kpp": null,
                "ogrn": null,
                "okpo": null,
                "persons": null,
                "orgLegalType": "SELF_EMPLOYED",
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": "Новоалексеевская",
                    "house": "18",
                    "block": "3",
                    "building": "",
                    "flat": null,
                    "fullAddress": "г Москва, Алексеевский р-н, ул Новоалексеевская, д 18 к 3",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "129626",
                    "regionFias": null,
                    "areaFias": null,
                    "cityFias": null,
                    "settlementFias": null
                },
                "email": null
            },
            "person": null
        },
          {
            "id": "e627aba4-bfe7-0ecf-14d8-b120233d9446",
            "type": "PERSON",
            "role": null,
            "name": "Вано",
            "organization": null,
            "person": {
                "name": "Вано",
                "surname": "",
                "patronymic": "",
                "fullName": "Вано о",
                "phone": "323232323232323434",
                "rawPhone": null,
                "alternativePhone": "",
                "email": null,
                "post": null,
                "personType": null,
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Алтайский",
                    "area": null,
                    "city": "Барнаул",
                    "settlement": null,
                    "street": "Барнаульская",
                    "house": "1",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
                    "fullCity": null,
                    "rawData": "Алтайский, Барнаул, Барнаульская, д 1",
                    "zip": "",
                    "regionFias": null,
                    "areaFias": null,
                    "cityFias": null,
                    "settlementFias": null
                }
            }
        }
    ]
}

 

/api/lite/settings/counteragents?extId=123-1234abc

Виды контрагентов для поля role: CUSTOMER, FULFILLMENT_SERVICE, DELIVERY_SERVICE, CALLCENTER_SERVICE, PRODUCT_SUPPLIER

Пример успешного ответа:

{     
    "success": true,
    "recordsTotal": 3,
    "counteragents": [
         {
            "id": "c82e2616-91e7-702e-d666-320534119a13",
            "extId": "123-1234abc",
            "type": "COMPANY",
            "role": "PRODUCT_SUPPLIER",
            "name": " ИП Петров А.В.",
            "organization": {
                "id": "f23b14bf-1151-dcb5-1b25-57a2b931e3ac",
                "name": "ИП Петров А.В.",
                "fullName": "ИП Петров А.В.",
                "phones": null,
                "inn": "5018081484",
                "kpp": null,
                "ogrn": null,
                "okpo": null,
                "persons": null,
                "orgLegalType": "SELF_EMPLOYED",
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": "Новоалексеевская",
                    "house": "18",
                    "block": "3",
                    "building": "",
                    "flat": null,
                    "fullAddress": "г Москва, Алексеевский р-н, ул Новоалексеевская, д 18 к 3",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "129626",
                    "regionFias": null,
                    "areaFias": null,
                    "cityFias": null,
                    "settlementFias": null
                },
                "email": null
            },
            "person": null
        },
          {
            "id": "e627aba4-bfe7-0ecf-14d8-b120233d9446",
            "type": "PERSON",
            "role": null,
            "name": "Вано",
            "organization": null,
            "person": {
                "name": "Вано",
                "surname": "",
                "patronymic": "",
                "fullName": "Вано о",
                "phone": "323232323232323434",
                "rawPhone": null,
                "alternativePhone": "",
                "email": null,
                "post": null,
                "personType": null,
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Алтайский",
                    "area": null,
                    "city": "Барнаул",
                    "settlement": null,
                    "street": "Барнаульская",
                    "house": "1",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
                    "fullCity": null,
                    "rawData": "Алтайский, Барнаул, Барнаульская, д 1",
                    "zip": "",
                    "regionFias": null,
                    "areaFias": null,
                    "cityFias": null,
                    "settlementFias": null
                }
            }
        }
    ]
}

 

Создание/обновление контрагента

/api/lite/settings/counteragents

Создает или обновляет данные контрагента.

Поле id в контрагенте и в организации служит для поиска существующего контрагента/организации.

Поле type может иметь следующие значения:

Поле orgLegalType может иметь следующие значения:

Пример запроса:

{   
            "id": "c82e2616-91e7-702e-d666-320534119a13",
            "extId": "externalSystemID-123",
            "type": "COMPANY",         
            "name": " ИП Петров А.В.",
            "organization": {
                "id": "f23b14bf-1151-dcb5-1b25-57a2b931e3ac",
                "name": "ИП Петров А.В.",
                "fullName": "ИП Петров А.В.",
                "phones": null,
                "inn": "5018081484",
                "kpp": null,
                "ogrn": null,
                "okpo": null,
                "persons": null,
                "orgLegalType": "SELF_EMPLOYED",
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": "Новоалексеевская",
                    "house": "18",
                    "block": "3",
                    "building": "",
                    "flat": null,
                    "fullAddress": "г Москва, Алексеевский р-н, ул Новоалексеевская, д 18 к 3",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "129626",
                    "regionFias": null,
                    "areaFias": null,
                    "cityFias": null,
                    "settlementFias": null
                },
                "postalAddress": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": "Новоалексеевская",
                    "house": "18",
                    "block": "3",
                    "building": "",
                    "flat": null,
                    "fullAddress": "г Москва, Алексеевский р-н, ул Новоалексеевская, д 18 к 3",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "129626",
                    "regionFias": null,
                    "areaFias": null,
                    "cityFias": null,
                    "settlementFias": null
                }
                "email": "abc@abc.ru"
            },
            "person": null
        }

Пример для физлица:

{
            "id": "e627aba4-bfe7-0ecf-14d8-b120233d9446",
  			"extId": "externalSystemID-123",
            "type": "PERSON",
            "role": null,
            "name": "Вано",
            "organization": null,
            "person": {
                "name": "Вано",
                "surname": "",
                "patronymic": "",
                "fullName": "Вано о",
                "phone": "323232323232323434",
                "rawPhone": null,
                "alternativePhone": "",
                "email": null,
                "post": null,
                "personType": null,
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Алтайский",
                    "area": null,
                    "city": "Барнаул",
                    "settlement": null,
                    "street": "Барнаульская",
                    "house": "1",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Алтайский, Барнаул, Барнаульская, д 1",
                    "fullCity": null,
                    "rawData": "Алтайский, Барнаул, Барнаульская, д 1",
                    "zip": "",
                    "regionFias": null,
                    "areaFias": null,
                    "cityFias": null,
                    "settlementFias": null
                }
            }
        }

Пример успешного ответа:

{     
    "success": true,
    "id": "c82e2616-91e7-702e-d666-320534119a13"
}

 

Удаление контрагента

/api/lite/settings/counteragents?id=2fe48a36-b1fd-b6f3-417b-689ff672c50d

Удаляет контрагента по его id. Если контрагент уже где-то используется, то при удалении возникнет ошибка.

 

Результат запроса:

{
        "success": true  
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Настройки аккаунта

/api/lite/settings/delivery-info-list

Получение перечня способов доставки для аккаунта

/api/lite/settings/delivery-info-list

Возвращает перечень способов доставки с доступными доп. сервисами по каждому.

Пример успешного ответа:

{     
    "success": true,
    "deliveryInfoList": [
        {
            "code": "08141770-8c5d-2ee0-1ddc-6733c7b29f7c",
            "deliveryCode": "SELF_PICKUP",
            "title": "Самовывоз со склада",
            "product": null,
            "imgUrl": null,
            "courierTitle": null,
            "freeDeliveryLimit": {
                "deliverySumBelowLimitAmount": 23432432.00,
                "deliverySumLimitAmount": 324234.00,
                "isDeliverySumLimitActive": true
            },
            "type": "SELF_PICKUP",
          	"fbmType": "WILDBERRIES", //OZON
          	"fboDeliveryByCaсtus": false
            "availableServices": null,
            "active": true,
            "publicAvailable": false
        },
        {
            "code": "5e08e4d9-128d-ba3d-496a-d7b9c783f7d9",
            "deliveryCode": "GLOBAL_DELIVERY",
            "title": "GLOBAL_DELIVERY",
            "product": "Терминал-дверь(Стандарт)",
            "imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_global_delivery_left.svg",
            "courierTitle": "Global Delivery",
            "type": "COURIER",
          	"fbmType": null,
            "availableServices": [
                "CHECK_CONTENT",
                "TRYING",
                "PARTIAL_DELIVERY",
                "REVERSE"
            ],
            "active": true,
            "publicAvailable": true
        },
        {
            "code": "80429450-85a3-7ba9-2b92-56b459d29ed4",
            "deliveryCode": "PICKPOINT",
            "title": "PICKPOINT",
            "product": "PICKPOINT_STANDARD",
            "imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_pickpoint_left.svg",
            "courierTitle": "PickPoint",
            "type": "PVZ",
            "availableServices": null,
            "active": true,
            "publicAvailable": true
        },
        {
            "code": "8ca527c5-d1ed-0a96-bacf-b0d6d109311b",
            "deliveryCode": "CDEK_CDEK_PARCEL_W_D",
            "title": "CDEK_CDEK_PARCEL_W_D",
            "product": "Посылка склад-дверь",
            "imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_cdek_left.svg",
            "courierTitle": "СДЭК",
            "type": "COURIER",
          	"fbmType": null,
            "availableServices": [
                "PARTIAL_DELIVERY",
                "CHECK_CONTENT",
                "TRYING",
                "DANGEROUS_CARGO",
                "REVERSE"
            ],
            "active": true,
            "publicAvailable": true
        },
        {
            "code": "3c43624e-9d8e-365d-979d-7f2bacf681dc",
            "deliveryCode": "CDEK_CDEK_PARCEL_W_W",
            "title": "CDEK_CDEK_PARCEL_W_W",
            "product": "Посылка склад-склад",
            "imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_cdek_left.svg",
            "courierTitle": "СДЭК",
            "type": "PVZ",
            "availableServices": [
                "PARTIAL_DELIVERY",
                "CHECK_CONTENT",
                "TRYING",
                "DANGEROUS_CARGO",
                "REVERSE"
            ],
            "active": true,
            "publicAvailable": true
        },
        {
            "code": "2da5bac0-bfd0-2f77-7f52-498d64802c81",
            "deliveryCode": "RUSSIAN_POST_TEMPOLINE_ONLINE_PARCEL",
            "title": "RUSSIAN_POST_TEMPOLINE_ONLINE_PARCEL",
            "product": "Посылка-онлайн",
            "imgUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_russian_post_left.svg",
            "courierTitle": "Почта РФ (Темполайн)",
            "type": "RUSSIAN_POST",
          	"fbmType": null,
            "availableServices": null,
            "active": true,
            "publicAvailable": true
        }
    ]
}

 

Обновление способа доставки

/api/lite/settings/delivery-info-list

Можно для имеющегося канала доставки изменить название и флаги доступности и публичной доступности, а также опции лимита бесплатной доставки.

Пример запроса:

{        
            "code": "08141770-8c5d-2ee0-1ddc-6733c7b29f7c",          
            "title": "Самовывоз со склада",          
            "active": true,
            "publicAvailable": false,
            "freeDeliveryLimit": {
                "deliverySumBelowLimitAmount": 23432432.00,
                "deliverySumLimitAmount": 324234.00,
                "isDeliverySumLimitActive": true
            }
}

Результат запроса: 

{
  "success":true 
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Настройки аккаунта

/api/lite/settings/domainAlias

Проверка доступности домена 3 уровня

/api/lite/settings/domainAlias

Метод возвращает флаг доступности запрошенного названия для домена 3 уровня (не используется никаким другим аккаунтом)

Запрос: Передать параметр domain, например: ?domain=foodshop

В ответ возвращается

успех:

{
"success": true,

"available": true

}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Обновление домена 3 уровня

/api/lite/settings/domainAlias

Метод обновляет домен 3 уровня на запрашиваемый

Запрос:

{
"domain":"foodshop"
}

В ответ возвращается

успех:

{
"success": true только не смогу сделать заказ, денег на карте не хватит
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Настройки аккаунта

/api/lite/settings/email/order

Получение текста заголовка и подвала для email оформления заказа

/api/lite/settings/email/order

Метод возвращает тексты email с заголовком и подвалом для шаблона письма покупателю после оформления заказа.

В ответ возвращается

успех:

{
"success": true,

"header": "Спасибо за оформление заказа",

"footer": "Контакты для связи: 123456"

}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Обновление текста заголовка и подвала для email оформления заказа

/api/lite/settings/email/order

Метод обновляет тексты email с заголовком и подвалом для шаблона письма покупателю после оформления заказа

Запрос:

успех:

{
"success": true
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Настройки аккаунта

/api/lite/settings/email/personal

Обновление данных по текущим настройкам почты

/api/lite/settings/email/personal

Обновляет данные по настройкам почты для текущего тенанта. С данных настроек идёт отправка сообщений пользователям магазина.

Отправляет тестовое письмо на тенантный адрес магазина. Если отправка удалась - сохраняет переданные настройки.

Запрос:

{
    "email":"no-reply@kak2c.ru",
    "password":"ra$[dsa[/01gh",
    "host":"smtp.yandex.ru",
    "port":"587"
}

 

Получение данных по текущим настройкам почты

/api/lite/settings/email/personal

Возвращает данные по настройкам почты для текущего тенанта. С данных настроек идёт отправка сообщений пользователям магазина.

Поля ответа:

Имя Описание
username Адрес почты
isActivePersonalEmail Активна ли почта на данный момент
errorMessage

Описание ошибки, если почта перестала работать

Ответ:

{
    "username": "no-reply@kak2c.ru",
    "password": "ra$[dsa[/01gh",
    "port": "587",
    "host": "smtp.yandex.ru",
    "isActivePersonalEmail": true,
    "errorMessage": ""
}
Настройки аккаунта

/api/lite/settings/offer-id-type

Задать тип поля - ключа для работы с предложениями

/api/lite/settings/offer-id-type

Задание поля HumanId или Внешний код - как ключевое для поиска товарных предложений для витрины/чекаута/создания заказа.

По умолчанию или при отсутствии значения используется поиск по HumanId 

Пример запроса: 

{      
        "type": "EXT_ID"  // HUMAN_ID
         
}

Результат запроса: 

{
        "success": true    
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Настройки аккаунта

/api/lite/settings/payment/payu

Записать данные собственного аккаунта payU

/api/lite/settings/payment/payu

Записать данные аккаунта payU для прямого зачисления оплат заказов покупателей.

Пример запроса:

{
  "merchantId": "abcd",
  "accountSecret": "abcd"
}

Результат запроса:

{
  "success":true,
  "accountId": "abcd",
  "url": "abcd"
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Настройки аккаунта

/api/lite/settings/payment/robokassa

Записать данные собственного аккаунта Робокасса

/api/lite/settings/payment/robokassa

Записать данные аккаунта Робокасса для прямого зачисления оплат заказов покупателей.

Пример запроса:

{
  "merchantId": "abcd",
  "accountSecret": "abcd",
  "accountSecret2": "abcd"
}

Результат запроса:

{
  "success":true,
  "accountId": "abcd",
  "resultUrl": "abcd",  - основной адрес приема ipn уведомлений (только оплаченные)
  "failUrl": "abcd", - адрес приема ipn уведомлений (только неоплаченные/отказ покупателя)
  "successesUrl": "abcd"  - адрес редиректа в магазин после оплаты 
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Настройки аккаунта

/api/lite/settings/payment/yandex

Записать данные собственного аккаунта Yandex Касса

/api/lite/settings/payment/yandex

Записать данные аккаунта Yandex для прямого зачисления оплат заказов покупателей

Пример запроса:

{
  "merchantId": "abcd",
  "accountSecret": "abcd"
}

Результат запроса:

{
  "success":true,
  "accountId": "abcd",
  "url": "abcd"
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Настройки аккаунта

/api/lite/settings/payment-methods

Получение перечня способов оплаты для аккаунта

/api/lite/settings/payment-methods

Возвращает перечень способов оплаты

Пример успешного ответа:

{ 
    "success": true,
    "paymentMethods": [
        {
            "paymentMethod": "COD_CARD",
            "name": "Оплата картой при получении",
            "code": "cod-card"
        },
        {
            "paymentMethod": "COD_CASH",
            "name": "Оплата наличными при получении",
            "code": "cod-cash"
        },
        {
            "paymentMethod": "ONLINE",
            "name": "Предоплата картой на сайте",
            "code": "online"
        }
    ]
}

 

Создать/изменить способ оплаты

/api/lite/settings/payment-methods

Создать / изменить способ оплаты.

Ключ для изменения - поле code - уникальное.

Все поля обязательны

Пример запроса:

{
     "paymentMethod": "COD_CARD",
     "name": "Оплата картой при получении",
     "code": "cod-card"
}

 

Результат запроса:

{
        "success": true,
        "name": "Оплата картой при получении",
        "code": "cod-card"     
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Удалить способ оплаты

/api/lite/settings/payment-methods

Удаление одного способа оплаты. Использовать параметр в url вида     ?code=test

Если способ оплаты не использован в документах и заказах - удаление пройдет успешно.

Результат запроса: 

{
   "success": true
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Настройки аккаунта

/api/lite/settings/pickup

Сохранение настроек точки сбора

/api/lite/settings/pickup

Сохранение ФИО, телефона сотрудника на точке сбора, названия магазина и адреса точки

Пример запроса:

{
    "person_full_name":"Петров Петр",
    "person_phone":"8(910)101-10-01",
    "shopName": "Зонты и сумки",
    "address":  {
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": "Озёрная",
                    "house": "4/9",
                    "block": "",
                    "building": "",
                    "flat": null,
                    "fullAddress": "г Москва, ул Озёрная, д 4/9",                                   
                    "zip": "119361",
                    "regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "areaFias":null,
                    "cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "settlementFias":null
                }
}

 

В ответ возвращается

успех:

{
"success": true
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Настройки аккаунта

/api/lite/settings/promocode

Получить список промокодов аккаунта (/api/lite/settings/promocode)

/api/lite/settings/promocode

Загрузка списка неудаленных промокодов аккаунта

 

Результат запроса:

{ 
  "success": true,
  "recordsTotal": 2,
  "promocodes": [
    {
    "code": "leto",
    "isActive": true,
    "discountType": "PERCENT",
    "discountValue": 20,
    "conditions": null,
    'useCount":20
    },
    {
    "code": "test",
    "isActive": true,
    "discountType": "FIX",
    "discountValue": 12,
    "conditions": [ //Условия действия (опционально). null для промокода без условий.
                {
                    "type": "TIME_LIMIT",
                    "name": "Срок действия промокода",
                    "num": 0,
                    "mandatory": true,
                    "unsuccessMessage": "Срок действия акции истёк",
                    "applyDiscount": false,
                    "applyDeliveryDiscount": false,
                    "fromDate": "2018-10-08 16:21:57",
                    "toDate": "2019-10-08 16:21:57",
                    "maxNumberOfUse": 0
                },
                {
                    "type": "USE_LIMIT",
                    "name": "Максимальное кол-во использований промокода",
                    "num": 1,
                    "mandatory": true,
                    "unsuccessMessage": "Промокод более недействителен",
                    "applyDiscount": false,
                    "applyDeliveryDiscount": false,
                    "maxNumberOfUse": 100
                },
                {
                    "type": "ORDER_SUM",
                    "name": "Бесплатная доставка курьером при заказе от 5000 р",
                    "num": 2,
                    "mandatory": true,
                    "unsuccessMessage": "Сумма заказа меньше 5000 рублей",
                    "applyDiscount": false,
                    "applyDeliveryDiscount": true,
                    "deliveryDiscountType": "PERCENT",
                    "deliveryDiscountValue": 100,
                    "deliveryCodes": [
                        "GLOBAL_DELIVERY"
                    ],
                    "maxNumberOfUse": 0,
                    "fromSum": 5000,
                    "toSum": -1
                },
                {
                    "type": "ORDER_SUM",
                    "name": "Скидка 200р при заказе от 2000 р",
                    "num": 3,
                    "mandatory": true,
                    "unsuccessMessage": "Сумма заказа меньше 2000 рублей",
                    "applyDiscount": true,
                    "discountType": "FIX",
                    "discountValue": 200,
                    "applyDeliveryDiscount": false,
                    "maxNumberOfUse": 0,
                    "fromSum": 2000,
                    "toSum": -1
                },
                {
                    "type": "DELIVERY_LOCATION",
                    "name": "Скидка 10% на доставку по Москве при оплате онлайн",
                    "num": 4,
                    "mandatory": false,
                    "unsuccessMessage": "Данный промокод недействителен",
                    "applyDiscount": false,
                    "applyDeliveryDiscount": true,
                    "deliveryDiscountType": "PERCENT",
                    "deliveryDiscountValue": 10,
                    "paymentMethodCodes": [
                        "online"
                    ],
                    "maxNumberOfUse": 0,
                  	"fullAddress": "Москва" //В этом поле хранится текстовый адрес для отображения в ЛК
                    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5"
                },
                {
                    "type": "SKU_COMBINATION",
                    "name": "2 + 1 Купи 2 товара, 3й в подарок",
                    "num": 5,
                    "mandatory": true,
                    "unsuccessMessage": "Промокод не применён. В корзине отсутствуют товары, соответствующие условию акции.",
                    "applyDiscount": true,
                    "discountType": "FIX",
                    "discountValue": 250,
                    "applyDeliveryDiscount": false,
                    "bonusSkus": [
                        {
                            "variantId": "1042",
                            "quantity": 1
                        }
                    ],
                    "maxNumberOfUse": 0,
                    "requiredSkus": [
                        {
                            "variantId": "1042",
                            "quantity": 1
                        }
                    ]
                },
      			{
					"type": "MULTI",
				    "anyOfSkus": [ //true, если пристутствует хотя бы 1 товар из списка (sku1 || sku2 || sku3)
                        {
                            "variantId": "1042",
                            "quantity": 1
                        },
                        {
                            "variantId": "1043",
                            "quantity": 1
                        }
                    ],
				    "applyDeliveryDiscount": false,	//Применять ли скидку на доставку
				    "applyDiscount": true,	//Применять ли скидку на товары
                  	"fullAddress": "Москва" //В этом поле хранится текстовый адрес для отображения в ЛК
				    "areaFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
				    "bonusSkus": [ 
                        {
                            "variantId": "1042",
                            "quantity": 1
                        }
                    ],
				    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
				    "deliveryCodes": [	//Коды служб доставки
				        "GLOBAL_DELIVERY"
				    ],
				    "deliveryDiscountType": "PERCENT", //FIX
				    "deliveryDiscountValue": 100,
				    "discountType": "PERCENT",
				    "discountValue": 13,
				    "fromDate": "2018-10-08 16:21:57",	//Дата, с которой действует промокод
				    "fromSum": 5000,	//Сумма, с которой действует промокод
				    "mandatory": false, //Обязательность условия. В случае MULTI не проверяется
				    "maxNumberOfUse": 100,	//Максимальное кол-во применений промокода
				    "minSkuCount": 2,	//Минимальное общее кол-во товаров в корзине 
                  	"maxSkuCount": 4	//Максимальное общее кол-во товаров в корзине 
				    "name": "",
				    "num": 6,
				    "paymentMethodCodes": [ //Коды способов оплаты
				        "online"
				    ],
				    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
				    "requiredSkus": [ //true, если пристутствуют все товары из списка  (sku1 && sku2 && sku3)
                        {
                            "variantId": "1042",
                            "quantity": 1
                        }
                    ],
				    "toDate": "2019-10-08 16:21:57", //Дата, до которой действует промокод
				    "toSum": -1,    //Сумма, с которой действует промокод. Отрицательное значение - без ограничений
				    "unwantedSkus": [ //true, если отсутствуют все товары из списка (!sku1 && !sku2 && !sku3)
                        {
                            "variantId": "1042",
                            "quantity": 1
                        }
                    ],
      				 "skusToApplyDiscount": [ //Товары, к которым примеяется скидка
                       {
                            "variantId": "1066",
                            "quantity": 1
                        }
                    ],
				}
            ],
      'useCount":100 //Счётчик использований
    }
]
}

 

Пейджинация

Для пейджинации используются параметры page и size: size - промокодов на странице, page - номер страницы.

Пример: /api/lite/settings/promocode?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=15

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

 

Поиск по коду(неполное соответствие, регистронезависимый)

параметр: codeSearch (часть наименования промокода , если передано, возвращается отфильтрованный список промокодов, аналогичный списку выше. Подробная информация по списку товаров также не возвращается).

например /api/lite/settings/promocode?codeSearch=ET

Поиск производится sql запросом вида: code LIKE '%et%'

Если параметр не задан(или пустой), возвращается полный список промокодов.

Пейджинация также есть.

 

Поиск по коду(точное значение, регистронезависимый)

параметр: code (наименование промокода , если передано, возвращается найденный промокод)

например /api/lite/settings/promocode?code=LETO

Возвращается всегда либо 1 промокод с подробными списками товаров (anyOfskus, bonusSkus, requiredSkus, unwantedSkus), либо ошибка "Не найден промокод со значением: %сcode%"

Является приоритетным по отношению к параметру codeSearch. Если  параметр code задан, поиск происходит только по его точному значению.

Положительный результат запроса: 

{
   "success":true,
   "code":"leto20",
   "isActive":true,
   "useCount":241,
   "discountType":"FIX",
   "discountValue":0,
   "conditions":[
      {
         "type":"SKU_COMBINATION",
         "name":"Танк в подарок",
         "num":1,
         "mandatory":true,
         "unsuccessMessage":"В корзине отсутствует волшебный дрон.",
         "applyDiscount":true,
         "discountType":"FIX",
         "discountValue":399,
         "applyDeliveryDiscount":false,
         "bonusSkus":[
            {
               "variantId":"1041",
               "quantity":1,
               "product":{
                  "id":"1030",
                  "extId":"955-2",
                  "extId2":null,
                  "shortName":"волшебный дрон (синий)",
                  "description":"волшебный дрон (синий)",
                  "available":true,
                  "deleted":false,
                  "brandName":null,
                  "countryOfOrigin":null,
                  "tnvedCode":null,
                  "internationalDescription":null,
                  "additionalDescriptions":null,
                  "isBestseller":null,
                  "isNovelty":null,
                  "type":"SKU",
                  "vat":"NO_VAT",
                  "reviewScore":null,
                  "options":null,
                  "images":[
                     {
                        "success":true,
                        "url":"https://storage.yandexcloud.net/images-k2c/1ed9d2ee-1c3e-49cc-a798-2dfc93f30f79.jpg",
                        "id":"1ed9d2ee-1c3e-49cc-a798-2dfc93f30f79.jpg",
                        "pos":"0.000000000000000"
                     }
                  ],
                  "variants":[
                     {
                        "id":"1041",
                        "extId":"955-2",
                        "extId2":null,
                        "article":"",
                        "price":1390.00,
                        "oldPrice":null,
                        "stock":[
                           {
                              "warehouseCode":"8b57ff7a-e63f-ecf4-2adf-8cdb093cb2c3",
                              "stockTotal":553,
                              "stockAvailable":552,
                              "stockReserved":1
                           }
                        ],
                        "ordering":null,
                        "defaultImage":null,
                        "weight":300,
                        "dimensions":{
                           "height":15,
                           "width":16,
                           "depth":7
                        },
                        "barcodes":[
                           {
                              "value":"6900000138113",
                              "isDefault":false
                           },
                           {
                              "value":"6900000138129",
                              "isDefault":false
                           }
                        ],
                        "vat":"NO_VAT",
                        "type":"SKU",
                        "optionsUsed":null
                     }
                  ],
                  "collections":[
                     "1001"
                  ],
                  "attributes":null,
                  "collectionPos":null,
                  "anyPublicCollections":null
               }
            }
         ],
         "requiredSkus":[
            
         ],
         "anyOfSkus":[
            {
               "variantId":"1041",
               "quantity":1,
               "product":{
                  "id":"1030",
                  "extId":"955-2",
                  "extId2":null,
                  "shortName":"волшебный дрон (синий)",
                  "description":"волшебный дрон (синий)",
                  "available":true,
                  "deleted":false,
                  "brandName":null,
                  "countryOfOrigin":null,
                  "tnvedCode":null,
                  "internationalDescription":null,
                  "additionalDescriptions":null,
                  "isBestseller":null,
                  "isNovelty":null,
                  "type":"SKU",
                  "vat":"NO_VAT",
                  "reviewScore":null,
                  "options":null,
                  "images":[
                     {
                        "success":true,
                        "url":"https://storage.yandexcloud.net/images-k2c/1ed9d2ee-1c3e-49cc-a798-2dfc93f30f79.jpg",
                        "id":"1ed9d2ee-1c3e-49cc-a798-2dfc93f30f79.jpg",
                        "pos":"0.000000000000000"
                     }
                  ],
                  "variants":[
                     {
                        "id":"1041",
                        "extId":"955-2",
                        "extId2":null,
                        "article":"",
                        "price":1390.00,
                        "oldPrice":null,
                        "stock":[
                           {
                              "warehouseCode":"8b57ff7a-e63f-ecf4-2adf-8cdb093cb2c3",
                              "stockTotal":553,
                              "stockAvailable":552,
                              "stockReserved":1
                           }
                        ],
                        "ordering":null,
                        "defaultImage":null,
                        "weight":300,
                        "dimensions":{
                           "height":15,
                           "width":16,
                           "depth":7
                        },
                        "barcodes":[
                           {
                              "value":"6900000138113",
                              "isDefault":false
                           },
                           {
                              "value":"6900000138129",
                              "isDefault":false
                           }
                        ],
                        "vat":"NO_VAT",
                        "type":"SKU",
                        "optionsUsed":null
                     }
                  ],
                  "collections":[
                     "1001"
                  ],
                  "attributes":null,
                  "collectionPos":null,
                  "anyPublicCollections":null
               }
            },
            {
               "variantId":"1040",
               "quantity":1,
               "product":{
                  "id":"1029",
                  "extId":"955-1",
                  "extId2":null,
                  "shortName":"волшебный дрон (красный)",
                  "description":"волшебный дрон (красный)",
                  "available":true,
                  "deleted":false,
                  "brandName":null,
                  "countryOfOrigin":null,
                  "tnvedCode":null,
                  "internationalDescription":null,
                  "additionalDescriptions":null,
                  "isBestseller":null,
                  "isNovelty":null,
                  "type":"SKU",
                  "vat":"NO_VAT",
                  "reviewScore":null,
                  "options":null,
                  "images":[
                     {
                        "success":true,
                        "url":"https://storage.yandexcloud.net/images-k2c/99eec60a-a8a8-4393-9a72-0ea990e86114.jpg",
                        "id":"99eec60a-a8a8-4393-9a72-0ea990e86114.jpg",
                        "pos":"0.000000000000000"
                     }
                  ],
                  "variants":[
                     {
                        "id":"1040",
                        "extId":"955-1",
                        "extId2":null,
                        "article":"",
                        "price":1390.00,
                        "oldPrice":null,
                        "stock":[
                           {
                              "warehouseCode":"8b57ff7a-e63f-ecf4-2adf-8cdb093cb2c3",
                              "stockTotal":283,
                              "stockAvailable":283,
                              "stockReserved":0
                           }
                        ],
                        "ordering":null,
                        "defaultImage":null,
                        "weight":300,
                        "dimensions":{
                           "height":16,
                           "width":15,
                           "depth":7
                        },
                        "barcodes":[
                           {
                              "value":"6900000138120",
                              "isDefault":false
                           }
                        ],
                        "vat":"NO_VAT",
                        "type":"SKU",
                        "optionsUsed":null
                     }
                  ],
                  "collections":[
                     "1001"
                  ],
                  "attributes":null,
                  "collectionPos":null,
                  "anyPublicCollections":null
               }
            }
         ],
         "unwantedSkus":[
            
         ],
         "minSkuCount":1
      },
      {
         "type":"PAYMENT_METHOD",
         "name":"Способ оплаты",
         "num":2,
         "mandatory":true,
         "unsuccessMessage":"Промокод не применён. Способ оплаты не соответствует правилам акции",
         "applyDiscount":false,
         "applyDeliveryDiscount":false,
         "bonusSkus":[
            
         ],
         "requiredSkus":[
            
         ],
         "anyOfSkus":[
            
         ],
         "unwantedSkus":[
            
         ],
        "skusToApplyDiscount": [
        ],
         "paymentMethodCodes":[
            "online",
            "cod-card"
         ]
      }
   ]
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Создать/изменить промокод (/api/lite/settings/promocode)

/api/lite/settings/promocode

Создать / изменить промокод.

Ключ для изменения - поле code - уникальное.

Регистр поля не имеет значения

все поля обязательны

 

Пример запроса:

{
    "code": "leto",
    "isActive": true,
    "discountType": "PERCENT",
    "discountValue": 20,
    "conditions": [ //Условия действия (опционально). null для промокода без условий.
      		{
					"type": "MULTI",
				    "anyOfSkus": [ //true, если пристутствует хотя бы 1 товар из списка (sku1 || sku2 || sku3)
                        {
                            "variantId": "1042",
                            "quantity": 1
                        },
                        {
                            "variantId": "1043",
                            "quantity": 1
                        }
                    ],
				    "applyDeliveryDiscount": false,	//Применять ли скидку на доставку
				    "applyDiscount": true,	//Применять ли скидку на товары
                  	"fullAddress": "Москва" //В этом поле хранится текстовый адрес для отображения в ЛК
				    "areaFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
				    "bonusSkus": [ 
                        {
                            "variantId": "1042",
                            "quantity": 1
                        }
                    ],
				    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
				    "deliveryCodes": [	//Коды служб доставки
				        "GLOBAL_DELIVERY"
				    ],
				    "deliveryDiscountType": "PERCENT", //FIX
				    "deliveryDiscountValue": 100,
				    "discountType": "PERCENT",
				    "discountValue": 13,
				    "fromDate": "2018-10-08 16:21:57",	//Дата, с которой действует промокод
				    "fromSum": 5000,	//Сумма, с которой действует промокод
				    "mandatory": false, //Обязательность условия. В случае MULTI не проверяется
				    "maxNumberOfUse": 100,	//Максимальное кол-во применений промокода
				    "minSkuCount": 2,	//Минимальное общее кол-во товаров в корзине 
                  	"maxSkuCount": 4	//Максимальное общее кол-во товаров в корзине 
				    "name": "",
				    "num": 6,
				    "paymentMethodCodes": [ //Коды способов оплаты
				        "online"
				    ],
				    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
				    "requiredSkus": {   //Товары, каждый из которых должен присутствовать в заказе в заданном кол-ве (т1 и т2 и т3)
                "djburbanbackpack": 1
                  }
                  "anyOfSkus": { //Товары, хотя бы одни из которых должен присутствовать в заказе в заданном кол-ве (т1 || т2 || т3)
                      "1002": 2,
                      "1003": 1,
                      "1000": 1
                  },
                  "unwantedSkus": {   //Товары, присутствие хотя бы одного из которых в заданном кол-ве не подходит под условие (!т1 || !т2 || !т3)
                      "1005": 1
                  },
                  "bonusSkus": {  //Бонусные товары, добавляемые к заказу
                      "1000": 1
                  },
				    "toDate": "2019-10-08 16:21:57", //Дата, до которой действует промокод
				    "toSum": -1,    //Сумма, с которой действует промокод. Отрицательное значение - без ограничений
				   
      				 "skusToApplyDiscount": ["1066", "1067"], //Товары, к которым применяется скидка(например, скидка 20% только на товар 1066)
			},  
      		{
            "type": "SKU_COMBINATION",
            "name": "Рюкзак URBAN BACKPACK",
            "num": 0,
            "mandatory": true,
            "unsuccessMessage": "Промокод не применён. В корзине отстутствует товар: Рюкзак URBAN BACKPACK",
            "applyDiscount": true,
            "discountType": "FIX",
            "discountValue": 1500,
            "applyDeliveryDiscount": false,
            "maxNumberOfUse": 0,
            "requiredSkus": {   //Товары, каждый из которых должен присутствовать в заказе в заданном кол-ве (т1 и т2 и т3)
                "djburbanbackpack": 1
            }
            "anyOfSkus": { //Товары, хотя бы одни из которых должен присутствовать в заказе в заданном кол-ве (т1 || т2 || т3)
                "1002": 2,
                "1003": 1,
                "1000": 1
            },
            "unwantedSkus": {   //Товары, присутствие хотя бы одного из которых в заданном кол-ве не подходит под условие (!т1 || !т2 || !т3)
                "1005": 1
            },
            "bonusSkus": {  //Бонусные товары, добавляемые к заказу
                "1000": 1
            },
			"skusToApplyDiscount": ["1066", "1067"], //Товары, к которым применяется скидка(например, скидка 20% только на товар 1066)
            "minSkuCount" : 2   //Минимальное общее кол-во товаров, удовлетворяющих условию акции (сумма [товар • кол-во] всех позиций заказа)
        },
        {
            "type": "PAYMENT_METHOD",
            "name": "Обязательный способ оплаты",
            "num": 5,
            "mandatory": true,
            "unsuccessMessage": "Промокод действителен только по предоплате картой на сайте",
            "applyDiscount": false,
            "applyDeliveryDiscount": false,
            "maxNumberOfUse": 0,
            "paymentMethodCodes": [
                "online"
            ]
        }
    ]
}

 

Результат запроса:

{
        "success": true    
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Удалить промокод (/api/lite/settings/promocode)

/api/lite/settings/promocode

Удаление одного промокода. Использовать параметр в url вида     ?code=test

 

Результат запроса:

{
   "success": true
}

 

Проверить действие промокода (публичный) (/api/lite/pub/promocode)

/api/lite/pub/promocode

Проверка переданного промокода на активность

параметр: code

например /api/lie/pub/promocode?code=test

 

Положительный результат запроса:

{
    "success": true,
    "code": "test",
    "isActive": true,
    "discountType": "FIX",    //   FIX/PERCENT
    "discountValue": 13
}

 

Ошибка, если у промокода заданы условия:

{ 
   "success":false,
   "errors":[ 
      { 
         "code":1,
         "message":"У промокода заданы условия применения. Для валидации, воспользуйтесь методом /api/lite/pub/check-promocode-conditions/"
      }
   ]
}

 

Отрицательный результат запроса:

{
  "success": false,
  "errors": []
}

 

Проверить действие промокода С УСЛОВИЯМИ (публичный)

/api/lite/pub/check-promocode-conditions

Для валидации условий промокода, необходимо передать весь заказ целиком, с заполненным промокодом (аналогично /api/lite/pub/order)

 

Пример запроса:

{
   "comment":"",
   "confirmStatus":"APPROVED",
   "paymentStatus":"NOT_PAID",
   "paymentMethodCode":"no-cod",
   "totalOrderSum":1590,
   "delivery":{
      "receiver":{
         "name":"",
         "phone":"",
         "alternativePhone":"",
         "email":"",
         "surname":"",
         "patronymic":""
      },
      "deliveryCode":"RUSSIAN_POST_TEMPOLINE",
      "timeFrom":"09:00",
      "timeTo":"20:00",
      "desiredDeliveryDate":null,
      "deliveryComment":"",
      "address":{
         "region":"Московская",
         "area":"Пушкинский",
         "city":"Пушкино",
         "settlement":null,
         "street":"",
         "house":"",
         "block":"",
         "building":"",
         "flat":"",
         "fullAddress":"",
         "zip":"",
         "regionFias":"29251dcf-00a1-4e34-98d4-5c47484a36d4",
         "areaFias":"2f88bc57-5096-4aee-bcfc-fe26d4dd3a26",
         "cityFias":"7f22cfa4-34fa-4fa0-bcb0-620cd8402cfa",
         "settlementFias":null,
         "country":"RU"
      },
      "pickupPointId":""
   },
   "items":[
      {
         "num":1,
         "id":"1000",
         "quantity":1,
         "variants":[
 
         ]
      },
      {
         "num":2,
         "id":"delivery"
      }
   ],
   "promocode":"CODE"
}

 

Результат запроса:

{ 
   "success":true,
   "code":"code",
   "isActive":true,
   "discountType":"FIX",
   "discountValue":836,
   "hasConditions":true,
   "deliveryDiscountValue":50, //Скидка на доставку в %
   "bonusSkus":{ 
      "1000":1  //Бонусные товары по промокоду в формате id : количество
   }
}
Настройки аккаунта

/api/lite/settings/user_notification

Сохранение настроек уведомлений

/api/lite/settings/user_notification

Описание....

Настройки аккаунта

/api/lite/settings/warehouses

Получение перечня складов для аккаунта

/api/lite/settings/warehouses

Возвращает перечень складов аккаунта

operatorType: MANUAL/FULFILLMENT
fulfillmentType: TEMPOLINE

Пример успешного ответа:

{
    "success": true,
    "warehouses": [
        {
            "code": "c738ff57-424c-2a8c-aa47-5378a88dc7c9",
            "title": "Свой склад",
            "isDefault": true,
            "operatorType": "MANUAL",
            "fulfillmentType": null,
            "operationType": "STORAGE",
            "address": {
                "country": "Russia",
                "countryCode": "RU",
                "region": "Москва",
                "area": null,
                "city": "Москва",
                "settlement": null,
                "street": "Очаковская Б.",
                "house": "47А",
                "block": "1",
                "building": null,
                "flat": null,
                "fullAddress": "Москва, Очаковская Б., д 47А, к 1",
                "fullCity": null,
                "rawData": null,
                "zip": null,
                "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "areaFias": null,
                "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "settlementFias": null
            },
            "manager": {
                "name": "Не задано",
                "surname": "",
                "patronymic": "",
                "fullName": "Егор",
                "phone": "+79111111111",
                "rawPhone": "+7 (911) 111 11 11",
                "alternativePhone": "",
                "email": "easychshnurki@yandex.ru",
                "post": null,
                "personType": null
            }
        }
]
}

 

Редактирование склада

/api/lite/settings/warehouses

На данном этапе реализовано только изменение  имени склада ("title":"Свой склад"). (задача 1669)

склад ищется по GUID ("code":"418a1cb1-eb57-ecc8-8c8f-08efb978bd49").

Пример вызова:

{
   "code":"418a1cb1-eb57-ecc8-8c8f-08efb978bd49",
   "title":"Свой склад",
   "isDefault":true,
   "operatorType":"MANUAL",
   "fulfillmentType":null,
   "fulfillmentSubType":null,
   "operationType":"STORAGE",
   "goodsCondition":"NORMAL",
   "parentCode":null,
   "address":{
      "country":"Россия",
      "countryCode":"RU",
      "region":"Москва",
      "area":null,
      "city":"Москва",
      "settlement":null,
      "street":"Проектируемый проезд № 1980",
      "house":"д. 4",
      "block":null,
      "building":null,
      "flat":null,
      "fullAddress":"Москва, Проектируемый проезд № 1980, д. 4",
      "fullCity":null,
      "rawData":null,
      "zip":null,
      "regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "areaFias":null,
      "cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
      "settlementFias":null
   },
   "manager":{
      "name":"Склада",
      "surname":"Менеджер",
      "patronymic":"",
      "fullName":"Менеджер склада",
      "phone":"+79011111111",
      "rawPhone":"+79011111111",
      "alternativePhone":"",
      "email":"778@q.qq",
      "post":null,
      "personType":null,
      "address":{
         "country":null,
         "countryCode":null,
         "region":null,
         "area":null,
         "city":null,
         "settlement":null,
         "street":null,
         "house":null,
         "block":null,
         "building":null,
         "flat":null,
         "fullAddress":null,
         "fullCity":null,
         "rawData":null,
         "zip":null,
         "regionFias":null,
         "areaFias":null,
         "cityFias":null,
         "settlementFias":null
      }
   }
}

Пример успешного ответа

{
    "success": true
}

 

Настройки аккаунта

/api/lite/settings/price-types

Получение перечня типов цен аккаунта

/api/lite/settings/price-types

Возвращает перечень типов цен

Пример успешного ответа

{     
    "success": true,
    "priceTypes": [
        {
            "currency": "RUB",
            "name": "Розничная цена",
            "code": "Розничная цена",
            "isDefault": false
        },
        {
            "currency": "RUB",
            "name": "Цена со скидкой",
            "code": "Цена со скидкой",
            "isDefault": false
        },
        {
            "currency": "RUB",
            "name": "BERU",
            "code": "BERU",
            "isDefault": false
        },
        {
            "currency": "RUB",
            "name": "Цена до скидки BERU",
            "code": "Цена до скидки BERU",
            "isDefault": false
        },
        {
            "currency": "RUB",
            "name": "OZON",
            "code": "OZON",
            "isDefault": false
        }
    ]
}

 

Создание/редактирование типа цены(/api/lite/settings/price-types)

Создает / редактирует тип цены.

Ключевое поле  - name

Для стандартные типов цен (Розничная цена, Цена до скидки) редактировать название и код нельзя.

/api/lite/settings/price-types

Пример запроса:

{    
"currency": "RUB",
"name": "Новая цена",
"code": "Новая цена",
"isDefault": false      
}

ответ

Пример запроса:

{    
      "success": true,     
      "name": "Новая цена",
      "code": "Новая цена"     
}
Настройки аккаунта

/api/lite/brief_report

Сводка по аккаунту (/api/lite/brief_report)

/api/lite/brief_report

Сводка включает блоки статистики (весь функционал со стороны Кактуса взять готовый).

 

 

 

Настройки аккаунта

/api/lite/settings/countries

Получение списка стран

/api/lite/settings/countries

Метод возвращает список всех стран, поддерживаемых бэкендом

В ответ возвращается

успех:

{
    "success": true,
    "countries": [
        {
            "code": "RU",          
            "rusName": "Россия"
        },
        {
            "code": "BY",         
            "rusName": "Беларусь"
        },
      ....
      ]
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Настройки аккаунта

/api/lite/settings/payment/portmone

Записать данные собственного аккаунта Portmone

/api/lite/settings/payment/portmone

Записать данные аккаунта Portmone для прямого зачисления оплат заказов покупателей.

Пример запроса:

{
  "merchantId": "abcd",
  "payeeId": "abcd",
  "accountLogin": "login",
  "accountPassword": "password",
  "credentials":"credentials"
}

Результат запроса:

{
  "success":true,
  "accountId": "abcd",
  "ipnUrl": "/portmone/result",  - основной адрес приема ipn уведомлений
}

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Настройки аккаунта

/api/lite/settings/email/templates

Получение шаблона для email, которые можно настроить

/api/lite/settings/email/templates

Метод возвращает текст email в параметре body в кодировке Base64, а так же его тип и текущий язык письма.

Параметры:

Пример запроса /api/lite/settings/email/templates/?type=REGISTRATION_CUSTOMER

В ответ возвращается:

успех:

{
"country": "RU",
"body": "OiAxMDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyIgd2lkdGg9IjE1OTUiPiA8L2E+PC9kaXY+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJ+Jm5ic3A7PC9wPg==",
"type": "REGISTRATION_CUSTOMER"
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Обновление текста письма

/api/lite/settings/email/templates

Метод обновляет тексты email

Тело запроса:

{
    "country": "RU",
    "body": "MDBweDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyIgd2lkdGg9IjE1OTUiPiA8L2E+PC9kaXY+CgkJCQkJCQkJCQkJCQkJCQkJCQk8L3RkPgoJCQkJCQkJCQkJwPg==",
    "type": "REGISTRATION_CUSTOMER"
}

успех:

{
"success": true
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Настройки аккаунта

/api/lite/settings/email/templates/init

Инициализация шаблонов по умолчанию

/api/lite/settings/email/order/init

Метод  добавит шаблоны email на текущем языке для регистрации покупателя и восстановления пароля для покупателя из главных настроек. Если при вызове метода шаблоны уже существуют, они обновятся на дефолтные.

Нужен для существующих магазинов, чтобы проинициализировать шаблоны.

успех:

{
"success": true
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Настройки аккаунта

/api/lite/settings/users/roles

/api/lite/settings/users/roles

Метод возвращает все доступные роли

Пример ответа:

{
    "success": true,
    "roles": [
        {
            "id": "b37a0b62-0ec9-3984-8509-6ce33be54bf2",
            "name": "Администратор",
            "privileges": [
                "ADMIN"
            ],
            "users": [
                "test@test.ru",
                "test@test.ru-expert"
            ]
        },
        {
            "id": "597aa7c2-4da9-ed44-669a-9710e07d6d6c",
            "name": "Складская обработка",
            "privileges": [
                "ORDERS_READ",
                "ORDERS_WRITE",
                "PURCHASE_ORDERS_WRITE",
                "PURCHASE_ORDERS_READ"
            ],
            "users": []
        },
        {
            "id": "a84dcbb4-7fec-c55c-9761-be7a68057edb",
            "name": "Подтверждение заказа",
            "privileges": [
                "ORDERS_READ",
                "ORDERS_WRITE"
            ],
            "users": [
                "test@test.ru_callcenter"
            ]
        }
    ]
}

 

/api/lite/settings/users/roles

Обновляет или создает роль. Если указан id, то обновляет существующую роль, иначе создает новую

Пример запроса:

{
    "id": "37a9dfae-c1b7-42a9-9db3-8e5015c6ae1e",
    "name": "Название роли",
    "privileges": ["DASHBOARD_DATA_READ"],
    "users": ["test-202-1@qqq.qq"]
}

 

Пример ответа:

{
    "success": true
}

 

/api/lite/settings/users/roles?id=9ad800a1-3eec-a1ea-988d-4e2c3e88e44f

Удаляет роль.

 

Список возможных привилегий

DASHBOARD_DATA_READ
PRODUCTS_READ
PRODUCTS_WRITE
ORDERS_READ
ORDERS_WRITE
PURCHASE_ORDERS_READ
PURCHASE_ORDERS_WRITE
SETTINGS_READ
SETTINGS_WRITE
SHOP_TEMPLATE_READ
SHOP_TEMPLATE_WRITE
ADMIN

Настройки аккаунта

/api/lite/settings/users

/api/lite/settings/users

Метод возвращает пользователей, созданных для магазина.

Параметры:

query - поисковый запрос (по имени/фамилии/отчеству/логину/телефону);

size - количество результатов (по умолчанию 10).

Пример ответа:

{
    "success": true,
    "users": [
        {
            "login": "test@test.ru",
          	"isSystemUser": true,
            "isRoot": true,
            "firstName": null,
            "lastName": null,
            "middleName": null,
            "phone": null,
            "roles": [
                {
                    "id": "b37a0b62-0ec9-3984-8509-6ce33be54bf2",
                    "name": "Администратор"
                }
            ]
        },
        {
            "login": "test@test.ru_callcenter",
          	"isSystemUser": true,
            "isRoot": false,
            "firstName": null,
            "lastName": null,
            "middleName": null,
            "phone": null,
            "roles": [
                {
                    "id": "a84dcbb4-7fec-c55c-9761-be7a68057edb",
                    "name": "Подтверждение заказа"
                }
            ]
        },
        {
            "login": "test@test.ru-expert",
          	"isSystemUser": true,
            "isRoot": false,
            "firstName": null,
            "lastName": null,
            "middleName": null,
            "phone": null,
            "roles": [
                {
                    "id": "b37a0b62-0ec9-3984-8509-6ce33be54bf2",
                    "name": "Администратор"
                }
            ]
        }
    ]
}

 

/api/lite/settings/users

Обновляет или создает пользователя. Если пользователь с указанным login существует, то обновляет его, иначе создает нового.

Пример запроса:

{
    "login": "test@test.ru",
    "firstName": "Имя",
    "lastName": "Фамилия",
    "middleName": "Отчество",
    "phone": "+7 999 999 99 99",
    "password": "qqq222",
    "roles": ["a84dcbb4-7fec-c55c-9761-be7a68057edb"]
}

 

Пример ответа:

{
    "success": true
}

 

/api/lite/settings/users?login=test@test.ru

Удаляет пользователя

Настройки аккаунта

/api/lite/settings/checkout/payment

Получение настроек онлайн оплаты

/api/lite/settings/checkout/payment

Метод возвращает настройки онлайн оплаты

Пример ответа:

{
  	"merchantId": "111222",
    "accountSecret": "live_1234567890",
    "ipnUrl": "http://app.kak2c.ru/yandex/confirmPaid",
  	"additionalIpnFailUrl": null,  // только для Робокассы
  	"additionalIpnSuccessUrl": null, // только для Робокассы
}
Настройки аккаунта

/api/lite/settings/checkout/delivery-region-settings

Редактирование настроек регионов доставки

/api/lite/settings/checkout/delivery-region-settings

Обновление настроек регионов доставки

orderSumMoreThan - наценка/скидка применится только от суммы заказа свыше суммы параметра.

Запрос:

{
    "commonSettings": [
        {
            "country": "ALL", // RU, SNG, OTHER
            "region": "ALL_REGIONS",
            "extraFeeFixValue": 100,
            "extraFeePercentValue": -50,          
            "orderSumMoreThan": 22000.00,
            "enabled": true,
            "tariffEnabled": true
        },
        {
            "country": "SNG",
            "region": "ALL_REGIONS",
            "extraFeeFixValue": 100,
            "extraFeePercentValue": 0,         
            "orderSumMoreThan": 22000.00,
            "enabled": true,
            "tariffEnabled": false
        },
         {
            "country": "RU",
            "region": "MOSCOW",
            "extraFeeFixValue": 100,
            "extraFeePercentValue": 0,         
            "orderSumMoreThan": 22000.00,
            "enabled": false,
            "tariffEnabled": true
        }
    ]
}

 

Успех:

{
    "success": true
}

Ошибка: 

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}
Настройки аккаунта

/api/lite/settings/regions

Получение списка регионов

/api/lite/settings/regions

Ответ:

{
    "regions": [
        {
            "title": "Все регионы",
            "name": "ALL_REGIONS",
            "fias": "ALL_REGIONS"
        },
        {
            "title": "Республика Адыгея",
            "name": "ADYGEA_REPUBLIC",
            "fias": "d8327a56-80de-4df2-815c-4f6ab1224c50"
        },
        {
            "title": "Республика Алтай",
            "name": "ALTAI_REPUBLIC",
            "fias": "5c48611f-5de6-4771-9695-7e36a4e7529d"
        },
        ...
    ]
}
Настройки аккаунта

/api/lite/settings/adAttachments

Получение настроек допвложений

/api/lite/settings/adAttachments

Пример успешного ответа:

{
    "adAttachments": [
        {
            "comment": "При упаковке сложить вдвое",
            "deliveryInfoList": [
                "ca038ac9-b0b3-2a56-ed81-79332334f551"
            ],
            "id": "5cbce395-939e-1103-11b2-dead1fe6298f",
            "img": "https://storage.yandexcloud.net/images-k2c/882e0f85-d7a6-49bd-90af-d71ea3355168.jpg",
            "productId": "975616ae-106c-8fd9-ede1-35b0efb9e458",
            "quantity": 1,
            "shortName": "Допвложение. Буклет",
            "variantId": "2473"
        }
    ],
    "success": true
}

Создание, Обновление настроек допвложений

/api/lite/settings/adAttachments

Создает/обновляет настройки допвложений. 

Пример запроса:

{
    "id": "5cbce395-939e-1103-11b2-dead1fe6298f", //Если не указан, создаётся новая настройка
    "variantId":"2473",    
    "quantity": 2,
    "comment":"При упаковке сложить вдвое",
    "deliveryInfoList":["ca038ac9-b0b3-2a56-ed81-79332334f551"]
}

Удаление настроек допвложений

/api/lite/settings/adAttachments

Удаление одной настройки допвложений. Использовать параметр в url вида ?id=5cbce395-939e-1103-11b2-dead1fe6298f

Тарификация

Тарификация

Комментарии к использованию методов Тарификации

1. Получение тарифов доставки (от Кактуса), для показа в процессе чекаута

Для получения тарифов на доставку, необходимо передать данные:

У нас также есть возможность отправки за границу (в любую страну) с автоматической растаможкой, для этого надо передать код страны, адрес на латинице (кроме СНГ), а также передать к товарам код тнвэд и описание на английском.

Для первого этапа, можно ограничиться доставкой по России, но заложить последующую международную доставку.

Для получения ФИАС кодов, можно воспользоваться сервисом Dadata, либо вашим внутренним решением, либо нашим подсказчиком:

/api/prompter/location
Запрос позволяет получить подсказки по городу, в ответ возвращаются данные по ФИАС, которые необходимо сохранить и использовать в дальнейшем для получения тарифов.

Для определения габаритов коробки (объемного веса), можно использовать метод:

/api/lite/pub/dimensions-by-package

Для этого необходимо передать вес и габариты каждого товара в заказе.

Запрос на получения тарифов /api/dlv/tariffs

в запросе необходимо указать:

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

Следует делать перерасчёт стоимости доставки в случае изменения состава заказа, изменении места доставки, изменении способа оплаты.

Для выбора точек ПВЗ на карте следует использовать скрипт вызова карты

Если при получении тарифов пришли тарифы в которых указан
type: "PVZ"
нужно дать возможность выбрать ПВЗ на карте.


Полученный результат выбора ПВЗ (код ПВЗ), стоимость доставки, и данные о локации сохранить в заказе, для передачи в сервис “Кактус” для Фулфилмент обработки.

Некоторые ПВЗ не поддерживают оплату при получении, для таких ПВЗ следует ограничить возможность выбора способа оплаты в заказе только предоплатой. В случае если paymentMethods возвращает хотя бы 1 способ оплаты - значит в этом пункте выдачи можно оплатить при получении, если список в paymentMethods  вернулся пустой, значит в этот ПВЗ можно отправить только предоплаченный заказ.

 

 

По всем методам апи этого раздела - авторизация работает по параметру Domain в header запросов.

Домен для всех аккаунтов генерируется автоматически при регистрации и его можно узнать в личном кабинете
https://lk2-test.kak2c.ru/settings в поле ID аккаунта.  Нужно в запросах передавать Domain = {"shop" + ID аккаунта}

Тарификация

/api/prompter/address

Подсказка полного адреса (/api/prompter/address)

/api/prompter/address

(метод требует авторизации по домену)

Для запроса необходимо выполнить следующий запрос

/api/prompter/address?query=москва1

Важно: При формировании объекта адреса доставки заказа необходимо в поле delivery.address.block передавать значение из поля block_value.

Поле block в ответе может содержать как номер корпуса, так и номер строения, в зависимости от значения поля block_type_full ("корпус"/"строение"), поэтому для сохранения обратной совместимости и однозначной интерпретации значений полей были введены 2 новых поля: block_value (всегда содержит номер корпуса) и  building (всегда содержит номер строения).

В ответ возвращается

успех:

{
    "success": true,
    "suggestions": [
        {
            "value": "г Москва, ул Озёрная, д 33",
            "unrestricted_value": "г Москва, ул Озёрная, д 33",
            "data": {
                "postal_code": "119361",
                "country": "Россия",
                "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "region_kladr_id": "7700000000000",
                "region_with_type": "г Москва",
                "region_type": "г",
                "region_type_full": "город",
                "region": "Москва",
                "area_fias_id": null,
                "area_kladr_id": null,
                "area_with_type": null,
                "area_type": null,
                "area_type_full": null,
                "area": null,
                "city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "city_kladr_id": "7700000000000",
                "city_with_type": "г Москва",
                "city_type": "г",
                "city_type_full": "город",
                "city": "Москва",
                "city_area": null,
                "city_district": null,
                "city_district_fias_id": null,
                "city_district_kladr_id": null,
                "city_district_with_type": null,
                "city_district_type": null,
                "city_district_type_full": null,
                "settlement_fias_id": null,
                "settlement_kladr_id": null,
                "settlement_with_type": null,
                "settlement_type": null,
                "settlement_type_full": null,
                "settlement": null,
                "street_fias_id": "2de05e24-76f3-490f-9770-c0b923e0cf80",
                "street_kladr_id": "77000000000211100",
                "street_with_type": "ул Озёрная",
                "street_type": "ул",
                "street_type_full": "улица",
                "street": "Озёрная",
                "house_fias_id": "5e8674fb-14d4-4d24-9bf5-872d03ea5a36",
                "house_kladr_id": "7700000000021110080",
                "house_type": "д",
                "house_type_full": "дом",
                "house": "33",
                "block_type": null,
                "block_type_full": null,
                "block": null,
                "block_value": null,
                "building": null,
                "flat_type": null,
                "flat_type_full": null,
                "flat": null,
                "flat_area": null,
                "square_meter_price": null,
                "flat_price": null,
                "postal_box": null,
                "fias_id": "5e8674fb-14d4-4d24-9bf5-872d03ea5a36",
                "fias_level": "8",
                "kladr_id": "7700000000021110080",
                "capital_marker": "0",
                "okato": "45268579000",
                "oktmo": "45323000",
                "tax_office": "7729",
                "tax_office_legal": "7729",
                "timezone": null,
                "geo_lat": null,
                "geo_lon": null,
                "beltway_hit": null,
                "beltway_distance": null,
                "qc_geo": null,
                "qc_complete": null,
                "qc_house": null,
                "unparsed_parts": null,
                "qc": null,
                "history_values": null,
                "source": null
            }
        }
    ]
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Тарификация

/api/prompter/street

Подсказка улицы для заданного населенного пункта

 /api/prompter/street

(метод требует авторизации по домену)

Для запроса необходимо передать название населенного пункта из метода /prompter/location и введенные пользователем буквы искомой улицы (для магазинов в России):

/api/prompter/street?query=г москва Ленинс

Для магазинов в Украине необходимо передать значение settlement_fias_id из метода /prompter/location в параметре settlementFiasCode и введенную часть улицы в параметре streetQuery:

/api/prompter/street?settlementFiasCode=e718a680-4b33-11e4-ab6d-005056801329&streetQuery=Незал

параметры запроса:

query Запрос, включающий название населенного пункта и введенную часть искомой улицы
city Название города
cityFiasCode Код города
settlement Название населенного пункта
settlementFiasCode Код населенного пункта
streetQuery Введенная часть искомой улицы

В ответ возвращаются варианты улицы (использовать значение value)

успех:

{
    "success": true,
    "suggestions": [
        {
            "value": "ул Ленинский проспект",
            "unrestricted_value": "г Москва, Ленинский проспект",
            "data": {
                .... прочие детали варианта
            }
        }
    ]
}

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Тарификация

/api/prompter/location

Подсказка населенного пункта

/api/prompter/location

(метод требует авторизации по домену)

Для запроса необходимо выполнить следующий запрос

/api/prompter/location?query=москва

опциональный параметр - include_foreign=true/false - позволяет искать только по России или включая зарубежные страны (если поиск по зарубежью активирован для данной учетной записи)

опциональный параметр - country=FR - позволяет искать, например, только по Франции. Для зарубежных стран при этом подсказка будет выдаваться на латинице. Если параметр не передан, то поиск происходит только по России.

 

В ответ возвращается

успех:

{
    "success": true,
    "suggestions": [
        {
            "value": "г Магадан",
            "unrestricted_value": "Магаданская обл, г Магадан",
            "data": {
                "postal_code": "685000",
                "country": "Россия",
                "region_fias_id": "9c05e812-8679-4710-b8cb-5e8bd43cdf48",
                "region_kladr_id": "4900000000000",
                "region_with_type": "Магаданская обл",
                "region_type": "обл",
                "region_type_full": "область",
                "region": "Магаданская",
                "area_fias_id": null,
                "area_kladr_id": null,
                "area_with_type": null,
                "area_type": null,
                "area_type_full": null,
                "area": null,
                "city_fias_id": "cb8ae35a-93df-4133-b377-50f3698c8b5e",
                "city_kladr_id": "4900000100000",
                "city_with_type": "г Магадан",
                "city_type": "г",
                "city_type_full": "город",
                "city": "Магадан",
                "city_area": null,
                "city_district": null,
                "city_district_fias_id": null,
                "city_district_kladr_id": null,
                "city_district_with_type": null,
                "city_district_type": null,
                "city_district_type_full": null,
                "settlement_fias_id": null,
                "settlement_kladr_id": null,
                "settlement_with_type": null,
                "settlement_type": null,
                "settlement_type_full": null,
                "settlement": null,
                "street_fias_id": null,
                "street_kladr_id": null,
                "street_with_type": null,
                "street_type": null,
                "street_type_full": null,
                "street": null,
                "house_fias_id": null,
                "house_kladr_id": null,
                "house_type": null,
                "house_type_full": null,
                "house": null,
                "block_type": null,
                "block_type_full": null,
                "block": null,
                "flat_type": null,
                "flat_type_full": null,
                "flat": null,
                "flat_area": null,
                "square_meter_price": null,
                "flat_price": null,
                "postal_box": null,
                "fias_id": "cb8ae35a-93df-4133-b377-50f3698c8b5e",
                "fias_level": "4",
                "kladr_id": "4900000100000",
                "capital_marker": "2",
                "okato": "44401000000",
                "oktmo": "44701000001",
                "tax_office": "4900",
                "tax_office_legal": "4900",
                "timezone": null,
                "geo_lat": "59.5681332",
                "geo_lon": "150.8084956",
                "beltway_hit": null,
                "beltway_distance": null,
                "qc_geo": "4",
                "qc_complete": null,
                "qc_house": null,
                "unparsed_parts": null,
                "qc": null,
                "history_values": null,
                "source": "Магадан, Магаданская обл"
            }
        }
    ]
}

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Тарификация

/api/prompter/iplocation

Определение населенного пункта по IP адресу

/api/prompter/iplocation

(метод требует авторизации по домену)

Для запроса необходимо выполнить следующий запрос

/api/prompter/iplocation?ip=87.250.250.242

параметр ip - опциональный, если не задан, то определяется на сервере автоматически

В ответ возвращается

успех:

{
    "success": true,
    "ip": "87.250.250.242", //ip из параметра
    "sourceIp": "87.250.250.242", //ip, определённый сервером
    "suggestions": [
        {
            "value": "г Москва",
            "unrestricted_value": "101000, г Москва",
            "data": {
                "postal_code": "101000",
                "country": "Россия",
                "countryCode": "RU",
                "region_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "region_kladr_id": "7700000000000",
                "region_with_type": "г Москва",
                "region_type": "г",
                "region_type_full": "город",
                "region": "Москва",
                "area_fias_id": null,
                "area_kladr_id": null,
                "area_with_type": null,
                "area_type": null,
                "area_type_full": null,
                "area": null,
                "city_fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "city_kladr_id": "7700000000000",
                "city_with_type": "г Москва",
                "city_type": "г",
                "city_type_full": "город",
                "city": "Москва",
                "city_area": null,
                "city_district": null,
                "city_district_fias_id": null,
                "city_district_kladr_id": null,
                "city_district_with_type": null,
                "city_district_type": null,
                "city_district_type_full": null,
                "settlement_fias_id": null,
                "settlement_kladr_id": null,
                "settlement_with_type": null,
                "settlement_type": null,
                "settlement_type_full": null,
                "settlement": null,
                "street_fias_id": null,
                "street_kladr_id": null,
                "street_with_type": null,
                "street_type": null,
                "street_type_full": null,
                "street": null,
                "house_fias_id": null,
                "house_kladr_id": null,
                "house_type": null,
                "house_type_full": null,
                "house": null,
                "block_type": null,
                "block_type_full": null,
                "block": null,
                "flat_type": null,
                "flat_type_full": null,
                "flat": null,
                "flat_area": null,
                "square_meter_price": null,
                "flat_price": null,
                "postal_box": null,
                "fias_id": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "fias_level": "1",
                "kladr_id": "7700000000000",
                "capital_marker": "0",
                "okato": "45000000000",
                "oktmo": "45000000",
                "tax_office": "7700",
                "tax_office_legal": "7700",
                "timezone": null,
                "geo_lat": "55.7540471",
                "geo_lon": "37.620405",
                "beltway_hit": null,
                "beltway_distance": null,
                "qc_geo": "4",
                "qc_complete": null,
                "qc_house": null,
                "unparsed_parts": null,
                "qc": null,
                "history_values": null,
                "source": null
            }
        }
    ]
}

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Тарификация

/api/lite/pub/check_pickup_location

Проверка адреса сбора на возможность обслуживания (публичный)

/api/lite/pub/check_pickup_location

(метод требует авторизации по домену)

 

Запрос

Параметр
Тип\формат Описание

regionFias

string Код региона населенного пункта по базе ФИАС. Получается ранее из поля region_fias_id подсказки (см. метод /api/prompter/location).

areaFias

string Код области населенного пункта по базе ФИАС. Получается ранее из поля area_fias_id подсказки

cityFias

string Код города населенного пункта по базе ФИАС. Получается ранее из поля city_fias_id подсказки

settlementFias

string Код населенного пункта населенного пункта по базе ФИАС. Получается ранее из поля settlement_fias_id подсказки

fullAddress

string Полное название населенного пункта по базе ФИАС. Получается ранее из поля unrestricted_value подсказки

 

Результат запроса

Параметр
Тип\формат Описание

pickup_point_available

boolean

Флаг доступности указанного в запросе населенного пункта для сбора заказов

 

Пример результата запроса

{
    "success": true,
    "pickup_location_available": true
}
Тарификация

/api/lite/pub/products/dimensions

Получение габаритов условного минимального упакованного места

 /api/lite/pub/products/dimensions

(метод требует авторизации по домену)

Получение габаритов минимальной условной коробки, в которую поместятся указанные товары с указанным количеством.

Не привязано к возможными габаритам типовых коробок или другим параметрам. Только математическое моделирование коробки с предпочтительным соотношением сторон 3:3:2

Поиск идет сначала по variantId, если он непустой, затем по variantExtId

Пример:

{
    "items":[
        {           
            "variantId":"1060",
            "variantExtId":"1060",
            "quantity": 22
        },
        {            
            "variantId":"1182",
          	"variantExtId":"1182",
            "quantity": 3
        }
    ]
     
}

 

Пример успешного ответа

{
    "success": true,
    "weight": 223,
    "dimensions": {
        "height": 40,
        "width": 40,
        "depth": 20
    }
}

 

Пример ошибки

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Не найден id 555"
        }
    ],
    "weight": null,
    "dimensions": null
}
Тарификация

/api/lite/pub/dimensions (deprecated)

Получение габаритов упаковки товаров (deprecated)

новый метод: /api/lite/pub/products/dimensions

/api/lite/pub/dimensions

По перечню товаров получает примерные габариты и массу упакованного места для указанного перечня

Запрос:

{
"items": [
            {               
                "id": "1002",
                "quantity": 1               
            },
            {               
                "id": "1003",
                "quantity": 3               
            }
         ]
}

Успех:

{
    "success": true,
    "weight": 357,
      "dimensions": {
        "height": 12,
        "width": 20,
        "depth": 23
      }
}

Ошибка:

"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Тарификация

/api/lite/pub/dimensions-by-package

Получение габаритов упаковки товаров по перечню параметров упаковок

/api/lite/pub/dimensions-by-package

(метод требует авторизации по домену)

По перечню упаковок получает примерные габариты и массу упакованного места

Запрос:

{
"items": [
            {
                "weight": 357, // в граммах
                "quantity": 2, // в штуках
                "dimensions": {
                    "height": 12, // в сантиметрах
                    "width": 20,
                    "depth": 23
                }
            },
            {
                "weight": 680,
                "quantity": 1,
                "dimensions": {
                    "height": 3,
                    "width": 20,
                    "depth": 4
                }
            }
         ]
}

Успех:

{
    "success": true,
    "weight": 357,
      "dimensions": {
        "height": 12,
        "width": 20,
        "depth": 23
      }
}

Ошибка:

{
  	"success": false,
	"errors": [
 		{
           "code": 0,
           "message": "Значение поля quantity во всех позициях должно быть > 0"
 		}
	]
}
Тарификация

/api/dlv/tariffs

Расчет тарифов (/api/dlv/tariffs)

/api/dlv/tariffs

(метод требует авторизации по домену)

Выполняет расчет доставки от пункта сбора заказов до указанного в виджете адреса доставки (в виде fias кодов) по указанным параметрам. Если sourceRegionFias, sourceAreaFias, sourceCityFias и sourcePostalCode не заданы - адрес отправления берётся из настроек точки сбора

fromTempoline - Заказ будет отправлен с нашего склада.

Для тарификации по России - нужны Фиас коды адреса получателя, для тарификации зарубежных адресов доставки - компоненты адреса Код страны, регион, город, населенный пункт.

При поиске тарифов для зарубежного города обязательно передавать поля country, region, city (также area, settlement, если есть).

 

Пример

{
    "fromTempoline": false,
    "sourceRegionFias": null,
    "sourceAreaFias": null,
    "sourceCityFias": null,
    "sourceSettlementFias": null,
    "sourcePostalCode": null,
    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
    "areaFias": null,
    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
    "settlementFias": null,
    "postalCode": "123456",
    "weight": 1450,
    "insuranceSum": 500, // оценочная стоимость товара для расчета суммы страховки (чаще всего передают 100% от стоимости товара)
    "codSum": 500, // сумма наложенного платежа, которую курьерская компания возьмёт с покупателя, следует передавать стоимость доставки+ стоимость товаров в случае если оплата при получении.
    "dimensions": {
        "height": 10,
        "width": 8,
        "depth": 8
    },
    "deliveryServices": [
        "PARTIAL_DELIVERY",
        "TRYING"
    ], //опциональный список требующихся допуслуг: Частичный выкуп, Примерка, Погрузо-разгрузочные работы на руках (ПРР).
    "floor": 15 //Этаж подъёма для ПРР. В случае, если указан "LIFT_TO_DOOR_MANUAL" в deliveryServices, этаж нужно указывать обязательно
}

 

Успех:

{
    "success": true,
    "tariffs": [
        {
            "minDeliveryTime": 5, // минимальный срок доставки после передачи заказа курьерской службе (в днях)
            "maxDeliveryTime": 6, // максимальный срок доставки после передачи заказа курьерской службе (в днях)
            "courier": "PickPoint", // наименование курьерской службы для покупателя
            "deliveryCode": "123456", // код тарифа 
          	"courierCode": "PICKPOINT",  // код курьерской службы (из справочника)
            "contractNumber": "443-12", // доп. код тарифа
            "type": "PVZ", // тип доставки (курьером или в ПВЗ)  // COURIER, RUSSIAN_POST, SELF_PICKUP
            "price": 817.1, // суммарная стоимость доставки для отправителя
            "codPrice": 0,  //стоимость агентского вознаграждения курьерской службы за перевод денежных средств за наложенный платёж
            "deliveryPrice": 742.1, // тариф за доставку в место назначение с учётом веса/габаритов
             "deliveryServices": [
                {
                    "price": 956.64,
                    "service": "BOX_NEEDED"
                },
                {
                    "price": 0,
                    "service": "TRYING"
                },
                {
                    "price": 0,
                    "service": "REVERSE"
                },
                {
                    "price": 0,
                    "service": "LIFT_TO_DOOR"
                },
                {
                    "price": 0,
                    "service": "LIFT_TO_DOOR_MANUAL"
                },
                {
                    "price": 40,
                    "service": "CHECK_CONTENT"
                }
            ], //доп.услуги доставки, если есть // могут включать PERSONALLY_IN_HANDS, REVERSE, CONTACTLESS_DELIVERY, DELIVERY_DATE_APPROVE, DANGEROUS_CARGO, WAITING_ON_ADDRESS, TEMPERATURE_REGIME, VERIFY, DAY_OFF_DELIVERY, PARTIAL_DELIVERY, LIFT_TO_DOOR, TRYING, CHECK_CONTENT, LIFT_TO_DOOR_MANUAL
            "insurancePrice": 75, // стоимость страховки для заказа у курьерской службы
          	"paymentMethods": ["COD_CARD", "ONLINE"]  // доступные способы оплаты
        },
        {
            "minDeliveryTime": 1,  
            "maxDeliveryTime": 1, 
            "courier": "Почта России",
            "courierCode": "RUSSIAN_POST_TEMPOLINE", 
            "deliveryCode": "RUSSIAN_POST_TEMPOLINE",
          	"contractNumber": "s-2333",
            "type": "RUSSIAN_POST",
            "price": 1736.6,
            "codPrice": 0,
            "deliveryPrice": 1733.6,
            "deliveryServices": [],
            "insurancePrice": 3,
          	"paymentMethods": ["COD_CARD"]
        }        
    ]
}

 

Ошибка:

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

 

Тарификация

/api/dlv/delivery_points

Список постаматов / ПВЗ

/api/dlv/delivery_points

(метод требует авторизации по домену)

Выполняет поиск постаматов/ПВЗ  в указанном в виджете адресе города/населенного пункта (в виде fias кодов) 

 

Пример:

{
    "regionFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
    "areaFias": null,
    "cityFias":"0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
    "settlementFias": null,
  	"countryCode": "RU",
    "region": null, // Заполняется, если countryCode задан и не RU
    "area": null, // Заполняется, если countryCode задан и не RU
    "city": null, // Заполняется, если countryCode задан и не RU
    "settlement": null, // Заполняется, если countryCode задан и не RU
    "courierCode": "PickPoint", - опциональный параметр для запроса ПВЗ/постаматов только по данной КС. Пока актуальны значения "PickPoint", "Boxberry" 
    "dimensions":{  - опционально фильтр по доступным габаритам в ПВЗ
      "height":50,   - в см
      "width":50,
      "depth":50
      },
	"weight": 6505,   - в граммах - опционально фильтр по доступной предельной массе груза в ПВЗ
	"codSum": 1234, - в рублях - опционально - сумма наложенного платежа, если ненулевая
	"deliveryServices":["PARTIAL_DELIVERY", "TRYING"] - опциональный список требущихся допуслуг: Частичный выкуп, Примерка.
}

 

Успех:

{
    "success": true,
    "list": [
        {
            "address": {
                "regionFias":"18133adf-90c2-438e-88c4-62c41656de70",
                "areaFias":"b502ae45-897e-4b6f-9776-6ff49740b537",
                "cityFias":"",
                "settlementFias":"",
                "country": "RU",
                "region": "Москва",
                "area": "",
                "city": "Москва",
                "settlement": "",
                "street": "Боровское ш.",
                "house": "20",
                "block": "",
                "building": "",
                "flat": "120",
                "fullAddress": "Москва, Боровское ш., 20, 120",
                "zip": ""
                }
            "metroStation": "Боровское шоссе",
            "latitude": "54.508904",
            "longitude": "36.262823",
            "code": "4005-002",
            "courier": "PickPoint",            
            "description": "Постамат расположен в супермаркете Фикс-Прайс,  вотдельно стоящем здании. Транспорт: Автобус №12, 61, 85, 97; Троллейбус №5, 12; Маршрутное такси №95, 97.            Остановка Библиотека им. Белинского.\nВойти в здание через центральный вход. Постамат и терминал расположен на 2 этаже в супермаркете Фикс-Прайс.",
            "maxSize": "43x23.4x34",
            "maxWeight": 1500,
            "courierCode": "PICKPOINT",
            "workTime": "Пн-Вс 10:00-19:00, Обед 10:00-19:00",
            "paymentMethods": ["COD_CARD", "ONLINE"],
  			"deliveryServices":["PARTIAL_DELIVERY", "TRYING"],
  			"type": "Postamat"
        }      
    ]
}

 

Ошибка:

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Тарификация

/api/dlv/delivery_point

Данные по одному ПВЗ

/api/dlv/delivery_point

(метод требует авторизации по домену)

Выполняет поиск одного ПВЗ по коду курьерской службы и коду ПВЗ

 

Пример:

{
"courierCode": "PickPoint",
"pvzCode":"7302-015"
}

 

Успех:

{
    "success": true,
    "list": [
        {
            "address": {
                "country": "Россия",
                "countryCode": "RU",
                "region": "Ульяновская",
                "area": null,
                "city": "Ульяновск",
                "settlement": null,
                "street": null,
                "house": null,
                "block": null,
                "building": null,
                "flat": null,
                "fullAddress": "Рябикова ул., д. 21, стр. 1",
                "fullCity": null,
                "rawData": null,
                "zip": "432045",
                "regionFias": "fee76045-fe22-43a4-ad58-ad99e903bd58",
                "areaFias": null,
                "cityFias": "bebfd75d-a0da-4bf9-8307-2e2c85eac463",
                "settlementFias": null
            },
            "metroStation": "",
            "latitude": "54.284595",
            "longitude": "48.30217",
            "code": "7302-015",
            "courier": "PickPoint",
            "description": "Пункт выдачи заказов расположен в ТЦ Вавилон. Транспорт: Маршрутное такси №4, 5, 43, 50, 52, 61, 71, 77, 81, 88, 96. Остановка Улица Станкостроителей.\nВойти в ТЦ Вавилон через центральный вход, на 2 этаже расположен пункт выдачи заказов.",
            "maxSize": "180",
            "maxWeight": 15,
            "workTime": "Пн-Пт 11:00-18:30, Сб 12:00-16:00",
            "paymentMethods": [
                "COD_CASH",
                "COD_CARD"
            ]
        }
    ]
}

 

Ошибка:

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Тарификация

/api/lite/tariffs

Расчет тарифов приватный

/api/lite/tariffs

Метод тарификации для вызова из ЛК (приватного доступа). 

Сигнатура полностью идентична публичному методу api/dlv/tariffs

Отличие - в ответе могут быть включены тарифы, которые публично недоступны. но каналы доставки которых активны.

В этом методе доступно поле dlvPrice, содержащее исходную цену от DLV

Тарификация

/api/lite/delivery_points

Список постаматов / ПВЗ

/api/lite/delivery_points

Метод списка ПВЗ для вызова из ЛК (приватного доступа). 

Сигнатура полностью идентична публичному методу api/dlv/delivery_points

Тарификация

/api/lite/delivery_point

Данные по одному ПВЗ

/api/lite/delivery_point

Метод загрузки одного ПВЗ для вызова из ЛК (приватного доступа). 

Сигнатура полностью идентична публичному методу api/dlv/delivery_point

Тарификация

/api/prompter/region

Подсказка улицы для заданного населенного пункта

 /api/prompter/region

(метод требует авторизации по домену)

Для запроса необходимо передать  введенные пользователем буквы искомого региона:

/api/prompter/region?query=Рязан

В ответ возвращаются варианты улицы (использовать значение value)

успех:

{
    "success": true,
    "suggestions": [
        {
            "value": "Рязанская область",
            "unrestricted_value": "Рязанская область",
            "data": {
                .... прочие детали варианта
            }
        }
    ]
}

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Тарификация

/api/prompter/countries

Список стран

/api/prompter/countries

(метод требует авторизации по домену)

Выводит список стран с их кодами

Пример ответа:

{
    "countries": [
        {
            "title": "Россия",
            "code": "RU"
        },
        {
            "title": "Беларусь",
            "code": "BY"
        },
        {
            "title": "Казахстан",
            "code": "KZ"
        },
        ...
    ]
}

Описание методов (old)

Описание методов (old)

Описание методов (old)

Запрос данных аккаунта (публичный)

/api/lite/pub/account_info

Документация обновляется.

 

Получение информации по предзаказу (публичный)

 /api/lite/pub/order

Документация обновляется.

 

Создание / обновление товарного предложения

/api/lite/offer

создает или обновляет (если задан sku.humanID) товарное предложение

 

Запрос:

{
     "sku": {    
                "id": "12345",  - опциональный параметр, только для обновления существующего предложения. значение генерируется при создании предложения.           
                "shortName": "краткое наименование",
                "fullName": "полное наименование",
                "article": "234234",
                "description": "описание"
            },  
     "price": 33.45,  
     "discountPrice": 20,
     "weight": 357,  - единица измерения: грамм
     "dimensions":{
                "height":12,  - единица измерения: сантиметр
                "width":20,  - единица измерения: сантиметр
                "depth":8  - единица измерения: сантиметр
                },
     "enabled":true,
     "pos": 123.456            
}
В ответ возвращается

Успех:

{
"success": true,

"humanId": "12345"

}

 

Ошибка: 

/api/lite/offer/pos

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Обновление позиции товарного предложения

/api/lite/offer/pos

Обновляет значение позиции для сортировки предложений в списке 

 

Запрос:

{
  "id": "1002",
  "pos": 123.456
}

 

 

Ответ:

{
  "success": true
}

 

Создание картинки к товарному предложению

/api/lite/offer/image

Загружает на сервер картинку и привязывает изображение к товару.

Используется заголовок запроса Content-type: multipart/form-data.

В качестве параметров запроса передается:

На стороне сервера:

В ответ возвращается информация о загруженной картинке:

 

Успех:

{
  "success": true,
  "image": {
    "orig": "https://img.kak2c.ru/g/d/123abc.jpg",
    "crop": "https://img.kak2c.ru/g/d/123abc_crop.jpg",
    "prev": "https://img.kak2c.ru/g/d/123abc_p.jpg",
    "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
    "pos": 123.456,
    "crop_p": [
      10,
      500,
      400,
      150
    ]
  }
}

Параметры:

 

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Загрузка картинки без привязки к предложению

 /api/lite/image

Загружает на сервер картинку в исходных размерах без сжатия.

Используется заголовок запроса Content-type: multipart/form-data.

В качестве параметров запроса передается:

На стороне сервера:

В ответ возвращается информация о загруженной картинке:

 

Успех:

{
  "success": true,
  "orig": "https://img.kak2c.ru/g/d/123abc.jpg"
}

Параметры:

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Обновление кропа картинки к товарному предложению

/api/lite/offer/image/crop

Обновляет параметры кропа (обрезки) у картинки товарного предложения.

 

Запрос:

{
  "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
  "crop_p": [
    10,
    500,
    400,
    150
  ]
}

 

В ответ возвращается результат операции, id обновленной картинки и новый url на кропнутое изображение и превью.

 

Пример успешного ответа:

{
  "success": true,
  "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
  "crop": "https://img.kak2c.ru/g/d/123abc_cropped.jpg",
  "prev": "https://img.kak2c.ru/g/d/123abc_preview.jpg"
}

 

 

В случае ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Картинки с указанным id не существует"
    }
  ]
}

 

Удаление картинки у товарного предложения

/api/lite/offer/image

Для удаления метки, выполняется следующий POST запрос с указанием идентификатора картинки.

 

Пример запроса:

{  
   "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF" 
}

 

В ответ возвращается результат операции и id удаленной картинки.

 

Пример успешного ответа:

{
  "success": true,
  "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF"
}

 

В случае ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Картинки с указанным id не существует"
    }
  ]
}

 

Обновление позиции картинки

/api/lite/offer/image/pos

Обновляет значение позиции для сортировки картинок в списке 

 

Запрос:

{
  "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF",
  "pos": 123.456
}


Ответ:

{
  "success": true
}

 

В случае ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Создание/обновление заказа

/api/lite/order

Создает новый заказ в системе Кактус или обновляет существующий.

Доставка выгружается как позиция в items (id = "delivery").

Цены позиций задаются в запросе.

 

Пример запроса:

{
    "order": {
        "comment": "",
        "confirmStatus": "NEED_CONFIRM",
        "paymentStatus": "NOT_PAID",
        "paymentMethodCode": "online",
        "totalOrderSum": 1212,
        "delivery": {
            "receiver": {
                "name": "Олег",
                "surname": "Коробов",
                "patronymic": "",
                "phone": "9153112255",
                "alternativePhone": "",
                "email": "korobov.oleg@gmail.com"
            },
            "deliveryCode": "courier",
            "timeFrom": "10:30",
            "timeTo": "20:00",
            "desiredDeliveryDate": "2018-10-18",
            "deliveryComment": "",
            "address": {
                "regionFias":"18133adf-90c2-438e-88c4-62c41656de70",
                "areaFias":"b502ae45-897e-4b6f-9776-6ff49740b537",
                "cityFias":"",
                "settlementFias":"",
                "country": "RU",
                "region": "Москва",
                "area": "",
                "city": "Москва",
                "settlement": "",
                "street": "Боровское ш.",
                "house": "20",
                "block": "",
                "building": "",
                "flat": "120",
                "fullAddress": "",
                "zip": ""
            },
            "pickupPointId": ""
        },
        "items": [
            {
                "num":1,
                "id": "48488",
                "quantity": 1,
                "price": 1212
            }
        ]
    }
}

 

В ответ возвращается

успех:

{
"success": true,

"orderId": "12345"

}

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ → обновление контактной информации получателя

/api/lite/order/receiver

Возможность обновить только контактную информацию

 

Запрос:

{
     "orderId": "1234", 
     "name": "Олег",
     "surname": "Коробов",
     "patronymic": "",
     "phone": "9153112255",
     "alternativePhone": "",
     "email": "korobov.oleg@gmail.com"
            
}

 

В ответ возвращается

успех:

{
"success": true

}

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ → обновление товарной части

/api/lite/order/items

Возможность обновить только табличную часть заказа

Необходимо в запросе передать новое желаемое состояние табличной части в виде непустого перечня позиций

 

Запрос:

{
    "orderId": "1234",  
    "items": [
            {
                "num":1,
                "id": "48488",
                "quantity": 1,
                "price": 1212
            }
        ]
            
}

 

В ответ возвращается

успех:

{
"success": true

}

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ → отменить

 /api/lite/order/cancelled

Производит отмену заказа. 

 

Пример запроса 

{ 
"orderId":"1029" 
}

 

В ответ возвращается

успех:

{
"success": true

}

 

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ → пометить оплаченным получателем

/api/lite/order/payment

Ставит статус оплаты покупателем.

 

Пример запроса 

{ 
"orderId":"1029" 
}

 

В ответ возвращается

успех:

{
"success": true

}

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Заказ → снять пометку оплаты заказа получателем

/api/lite/order/payment

Снимает статус оплаты покупателем.

 

Пример запроса 

{ 
"orderId":"1029" 
}

 

 

В ответ возвращается

успех:

{
"success": true
}

 

 

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

 

Пример ошибки:

Документация обновляется.

Заказ → получить акт приема передачи

/api/lite/order/takeout_list

Получение печатной формы в pdf для указанного списка заказов

Печатная форма возвращается в формате base64.

 

Пример ошибки:

{
  "orders": ["1001", "1002", "1003"]
}

 

Успех:

{
  "success": true,  
  "content" : "base64data"
     
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "Текст ошибки"
    }
  ]
}

 

Оплатить доставку заказа/заказов

 /api/lite/order_delivery_payment

Производит списание средств за доставку указанных заказов. 

После успешного списания - создает заявку на сбор курьером на указанную дату. Если заявка уже есть - новая не создается. Если на указанную дату заявку оформить уже нельзя (опоздал) - автоматом создается заявка на ближайшую возможную дату.

{
  "orders": ["1005", "1008"],
  "date": "2018-01-01", - обязательные для всех способов отгрузки кроме Своих курьеров
  "timeFrom": "09:00", - см выше
  "timeTo": "14:00", - см выше
  "courierId": "aa23s" - обязательный только для способа отгрузки Свои курьеры  
}

 

Успех:

Возвращается дата и интервал запрошенного приезда курьера.

{
  "success": true,
  "date": "2018-01-01",
  "timeFrom": "09:00",
  "timeTo": "14:00"
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Отменить оплату доставки заказа/заказов

/api/lite/order_delivery_payment

Пока не реализуем этот метод.

Вариант:

Производит отмену списания с баланса доставки указанных заказов, если по ним не было статусов от GD по сбору. Если какие то статусы по заказу поступали от GD - значит они уже забрали груз - тогда все заказы данного реестра отгрузки автоматом помечаются отгруженными и вернуть сумму по ним нельзя. 

 

Оформить вызов курьера

/api/lite/courier_call

Создает заявку на сбор курьером на указанную дату. Если заявка уже есть - возвращает ошибку, что заявка уже есть.

 

Пример ошибки:

{
  "date": "2018-01-01",
  "timeFrom": "09:00",
  "timeTo": "14:00"
}

 

Успех:

{
  "success": true
}

 

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Отменить вызов курьера

/api/lite/courier_call

Отменяет заявку на вызов курьера, если заявка на эту дату и интервал есть. если заявки нет - возвращает ошибку.

Пример ошибки:

{
  "date": "2018-01-01",
  "timeFrom": "09:00",
  "timeTo": "14:00"
}

 

Успех:

{
  "success": true
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Получить список транзакций

/api/lite/transaction

Получение списка транзакций баланса аккаунта.

 

Пример ошибки:

{
  "transactions":[
        {
            "date": "2019-03-01 17:53:23.538",
            "sum": 1500.50,
            "documentId": "1003",
            "documentType": "PAYMENT",
            "description": "Пополнение баланса по счету", // из справочника         
            "orderId": null
        },
        {
            "date": "2019-03-02 19:57:23.538",
            "sum": -265.57,
            "documentId": "1050",
            "documentType": "ORDER_PAYMENT_DOC_FACT",
            "description": "Оплата доставки заказа 1024 (доставка)", // в скобках - справочник статей расхода: доставка, страховка, наложенный платеж           
            "orderId": "1024"
        }
    ]
}

 

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Получить список транзакций по заказу

 /api/lite/order/transaction

Получение списка транзакций баланса оплаты доставки и услуг указанного заказа

запрос должен содержать параметр orderId с номером заказа, например

?orderId=1020

 

Результат запроса:

{
  "transactions":[  
        {
            "date": "2019-03-02 19:57:23.538",
            "sum": -265.57,
            "documentId": "1050",
            "documentType": "ORDER_EXPENSE_PAYMENT_DOC",
            "description": "Списание по расходам на оплату услуг заказа 1020 (доставка)",
            "orderId": "1020"
        },  
        {
            "date": "2019-03-02 19:57:23.538",
            "sum": 265.57,
            "documentId": "1052",
            "documentType": "ORDER_PAYMENT_DOC_FACT",
            "description": "Оплата доставки заказа 1020 (доставка)",            
            "orderId": "1020"
        }
         
    ]
}

 

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Создать счет на оплату и получить информацию для оплаты

/api/lite/payment

 

Запрос:

{
    "sum" : "222"
}

 

Ответ:

{
    "success": true,
    "errors": [],
    "redirectData": {
        "data": {
            "entries": [
                {
                    "num": 0,
                    "name": "MERCHANT",
                    "value": "kaktwocr"
                },
                {
                    "num": 1,
                    "name": "ORDER_REF",
                    "value": "25567175-8d84-e371-90fa-8a6e86a69aa4"
                },
                {
                    "num": 2,
                    "name": "ORDER_DATE",
                    "value": "2019-03-11 17:09:35"
                },
                {
                    "num": 3,
                    "name": "ORDER_PNAME[]",
                    "value": "Пополнение баланса аккаунта №6419855"
                },
                {
                    "num": 4,
                    "name": "ORDER_PCODE[]",
                    "value": "balance"
                },
                {
                    "num": 5,
                    "name": "ORDER_PRICE[]",
                    "value": "222.00"
                },
                {
                    "num": 6,
                    "name": "ORDER_QTY[]",
                    "value": "1"
                },
                {
                    "num": 7,
                    "name": "ORDER_VAT[]",
                    "value": "0"
                },
                {
                    "num": 8,
                    "name": "PRICES_CURRENCY",
                    "value": "RUB"
                },
                {
                    "num": 9,
                    "name": "DESTINATION_CITY",
                    "value": ""
                },
                {
                    "num": 10,
                    "name": "DESTINATION_STATE",
                    "value": ""
                },
                {
                    "num": 11,
                    "name": "DESTINATION_COUNTRY",
                    "value": ""
                },
                {
                    "num": 12,
                    "name": "PAY_METHOD",
                    "value": "CCVISAMC"
                },
                {
                    "num": 13,
                    "name": "ORDER_PRICE_TYPE[]",
                    "value": "GROSS"
                },
                {
                    "num": 14,
                    "name": "ORDER_HASH",
                    "value": "6fe466d056fcc82836a861c322070381"
                },
                {
                    "num": 15,
                    "name": "BILL_FNAME",
                    "value": "Петр"
                },
                {
                    "num": 16,
                    "name": "BILL_LNAME",
                    "value": "Петров"
                },
                {
                    "num": 17,
                    "name": "BILL_EMAIL",
                    "value": "abc3@abc.ru"
                },
                {
                    "num": 18,
                    "name": "BILL_PHONE",
                    "value": "111111"
                },
                {
                    "num": 19,
                    "name": "BILL_COUNTRYCODE",
                    "value": "RU"
                },
                {
                    "num": 20,
                    "name": "BACK_REF",
                    "value": ""
                },
                {
                    "num": 21,
                    "name": "LANGUAGE",
                    "value": "RU"
                },
                {
                    "num": 22,
                    "name": "CURRENCY",
                    "value": "RUB"
                }
            ],
            "url": "https://sandbox.payu.ru/order/lu.php"
        },
        "paymentProvider": "PAYU"
    }
}

 

Для работы в песочнице PayU использовать карты из https://secure.payu.ru/docs/integration-sandbox/ru/

 

Пример формы, которую нужно сгенерировать на клиенте:

<html>
    <head></head>
    <body>
        <form name="example" method="POST" action="https://sandbox.payu.ru/order/lu.php">
            <input type="hidden" name="MERCHANT" value="kaktwocr">
            <input type="hidden" name="ORDER_REF" value="25567175-8d84-e371-90fa-8a6e86a69aa4">
            <input type="hidden" name="ORDER_DATE" value="2019-03-11 17:09:35">
            <input type="hidden" name="ORDER_PNAME[]" value="Пополнение баланса аккаунта №6419855">
            <input type="hidden" name="ORDER_PCODE[]" value="balance">
            <input type="hidden" name="ORDER_PRICE[]" value="222.00">
            <input type="hidden" name="ORDER_QTY[]" value="1">
            <input type="hidden" name="ORDER_VAT[]" value="0">
            <input type="hidden" name="PRICES_CURRENCY" value="RUB">
            <input type="hidden" name="DESTINATION_CITY" value="">
            <input type="hidden" name="DESTINATION_STATE" value="">
            <input type="hidden" name="DESTINATION_COUNTRY" value="">
            <input type="hidden" name="PAY_METHOD" value="CCVISAMC">
            <input type="hidden" name="ORDER_PRICE_TYPE[]" value="GROSS">
            <input type="hidden" name="ORDER_HASH" value="6fe466d056fcc82836a861c322070381">
            <input type="hidden" name="BILL_FNAME" value="Петр">
            <input type="hidden" name="BILL_LNAME" value="Петров">
            <input type="hidden" name="BILL_EMAIL" value="abc3@abc.ru">
            <input type="hidden" name="BILL_PHONE" value="111111">
            <input type="hidden" name="BILL_COUNTRYCODE" value="RU">
            <input type="hidden" name="BACK_REF" value="">
            <input type="hidden" name="LANGUAGE" value="RU">
            <input type="hidden" name="CURRENCY" value="RUB">
            <button type="submit">Оплатить</button>
        </form>
    </body>
</html>

 

Получить список своих курьеров

/api/lite/own_courier

Получение списка своих курьеров.

Пример ошибки:

{
  "couriers":[
        {
            "id": "123456abc",
            "fullName": "Василий",
            "phone": "+7(901)1122121"
        },
        {
            "id": "123457abc",
            "fullName": "Петр",
            "phone": "+7(901)1122122"
        }
    ]
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Создать/обновить своего курьера

/api/lite/own_courier

Создание или обновление (если задан id) своего курьера

Пример запроса:

{
  "id": "123456abc",
  "fullName": "Василий",
  "phone": "+7(901)1122121"
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Удаление курьера

/api/lite/own_courier

Для удаления курьера, выполняется следующий POST запрос с указанием идентификатора курьера.

 

Пример запроса:

{  
   "id": "6F9619FF-8B86-D011-B42D-00CF4FC964FF" 
}


В ответ возвращается результат операции

Пример успешного ответа:

{
  "success": true 
}

В случае ошибки:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "курьера с указанным id не существует"
    }
  ]
}

 

Заказ - отметить доставку

/api/lite/delivery_result

Для доставки своими курьерами - простановка результата доставки: доставлен/отказ/утеря.

Пример запроса:

{
  "orderId": "123456abc",
  "result": "DELIVERED", //LOST,RETURNING,RETURNED
  "comment": "abcd"
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Ответ:

Документация обновляется.

 

Пример ошибки:

Документация обновляется.

 

Записать данные собственного аккаунта Робокасса

/api/lite/settings/payment/robokassa

Записать данные аккаунта робокасса для прямого зачисления оплат заказов покупателей.

 

Пример запроса:

{
  "merchantId": "abcd",
  "accountSecret": "abcd",
  "accountSecret2": "abcd"
}

 

Результат запроса:

{
  "success":true,
  "accountId": "abcd",
  "resultUrl": "abcd",  - основной адрес приема ipn уведомлений (только оплаченные)
  "failUrl": "abcd", - адрес приема ipn уведомлений (только неоплаченные/отказ покупателя)
  "successesUrl": "abcd"  - адрес редиректа в магазин после оплаты  
}

 

Ошибка:

Документация обновляется.

 

Получить макет витрины(публичный)

 /api/lite/pub/settings/template

Получение макета витрины магазина аккаунта, в формате, предназначенном для ui витрины

 

Результат запроса:

{
  "templates" : [
        {
            "id": "123456",
            "isDefault": true,
            "htmlContent": "<html>...."
        }
    ]
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Получить макеты витрин

/api/lite/settings/template

Получение перечня макетов витрин магазинов аккаунта, в формате, предназначенном для ui конструктора витрины

Для получения одного макета по id - использовать параметр в url вида ?id=123456

 

Результат запроса:

{
  "templates" : [
        {
            "id": "123456",
            "isDefault": true,
            "content": "contentData...."
        }
    ]
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

 

Создать/обновить макет витрины

/api/lite/settings/template

Создание/обновление данных о макете витрины в формате для ui конструтора

 

Пример запроса:

{       
        "id": "123456",  // при наличии параметра - обновляет существующий макет по его id
        "isDefault": true,
        "content": "contentData....",
        "htmlContent": "html content Data"
}

 

Результат запроса:

{
        "success": true,
        "id": "123456"
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Удалить макет витрины

/api/lite/settings/template

Удаление одного макета. Использовать параметр в url вида     ?id=123456

 

Результат запроса:

{
   "success": true
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Получить общие макеты витрин

/api/lite/settings/template/general

Получение перечня стандартных макетов витрин магазинов в формате, предназначенном для ui конструктора витрины

Для получения одного макета по id - использовать параметр в url вида     ?id=123456

 

Результат запроса:

{
  "templates" : [
        {
            "id": "123456",
            "isDefault": true,
            "content": "contentData...."
        }
    ]
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Получить общие шаблоны блоков витрин

/api/lite/settings/template/block

Получение перечня стандартных блоков витрин магазинов в формате, предназначенном для ui конструктора витрины

Для получения одного блока по id - использовать параметр в url вида     ?id=123456

 

Результат запроса:

{
    "blocks": [
        {
            "id": "f4173840-f409-424d-a000-24542b391c5d",
            "name": "block name",
            "content": "contentData...."
        }
    ]
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Получить заявки на сбор

/api/lite/gather

Получение списка заявок на сбор, сортировка - свежие по полю date - сначала

 

Результат запроса: 

{
    "gathers": [
        {
            "success": true,
            "comment": null,
            "id": "1000-GD",
            "date": "2019-03-07 12:37:18",          
            "desiredDate": "2019-03-15",
            "desiredHourStart": "09:00",
            "desiredHourEnd": "14:00",
            "status": "AWAITING_CARGO",   //CREATED,CARGO_SHIPPED,HOLD,CANCELED
            "trackingNumber": "100039439"
        }
    ]
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

 

Получить варианты курьерских пакетов

/api/lite/pub/courier_pack

Получение списка доступных типов курьерских пакетов с размерами 

 

Результат запроса:

{
    "courier_packs": [
        {
            "success": true,
            "type": "PACKET", // PAPERBOX
            "sizeType": "S",  // M/L
            "cargoWeight": 1500,  // максимальный вес содержимого в граммах           
            "dimensions": {
                "height": 12,
                "width": 20,
                "depth": 8
            }
        }
    ]
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Создать пользователя для Expert

 /api/lite/settings/go-expert

Метод только для админов системы. Генерирует для аккаунта Lite нового пользователя чтобы под ним можно было рабоатть в интерфейсе Expert.

Логин равен логину исходного аккаунта (тенанта) + суффикс "-expert", например: manager@shop.ru-expert

Пароль равен паролю исходного аккаунта. При смене пароля исходного пользователя - expert логин останется с прошлым паролем.

Параметр URL:     ?с=123    - проверочный код.

 

Результат запроса:

{
      "success": true
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Описание методов (old)

/api/lite/pub/settings/catalog

Получение текущего основного каталога

/api/lite/pub/settings/catalog

 

Пример успешного ответа:

{
  "success": true,
  "name": "Каталог 1",
  "code": "1000",
  "items": [
    {
    "title": "Смартфоны iPhone",
    "code": null,
    "collectionId": "1026",
    "defaultImage": "https://items.s1.citilink.ru/811882_v03_s.jpg",
    "items": null
    }
]
}
Описание методов (old)

Методы API для системы "Кактус"

api/lite/courier_callЧасть методов представлена из "надстройки" – Кактус Лайт (/api/lite/*), часть методов относится к работе подсказок (/api/prompter/*), а часть к работе механизма по доставкам.

Необходимо во всех вызовах, содержащих /pub, /dlv, /prompter, кроме регистрации и авторизации, (например /api/lite/pub/order) указывать имя текущего домена в заголовках запроса (Header) в параметре Domain. Если в вызове нет /pub, /dlv, /prompter -  (например /api/lite/offer) - то нужно указывать токен доступа, полученный в методе регистрации/авторизации.

 

Запрос Метод Авторизация Описание Разработано Комментарии для бэкенда
Создание нового аккаунта Кактус Lite POST /api/lite/pub/register нет public  
Запрос на сброс пароля Кактус Lite POST /api/lite/pub/password_reset нет public  
Сброс пароля POST /api/lite/pub/password_reset_confirm нет

 

public, защита по временному токену сброса пароля

 

 
Методы для автоподсказок по вводу адресов

Подсказка населенного пункта

GET /api/prompter/location нет По переданной части населенного пункта, возвращает варианты возможных населенных пунктов  
Подсказка полного адреса GET /api/prompter/address нет По переданной части адреса, возвращает варианты адресов  
Методы для работы CMS составляющий Кактус Лайт
Запрос данных аккаунта
(публичный)
GET /api/lite/pub/account_info

нет

По указанному имени домена получает информацию об аккаунте - только данные для публичного использования. Например, настройки виджета.

Также используется для проверки домена на доступность.

 

для проверки доступности домена и его присвоения есть отдельный метод:

/api/lite/settings/domainAlias - работает по токену доступа

 

-публичные настройки виджета: порог бесплатной доставки

2

Получение информации по заказу GET /api/lite/pub/order нет По указанному домену и номеру заказа, возвращает текущее состояние заказа и публичную информацию

-по новой dto заказа

?требуется маппинг инфостатусов заказа и статусов lite

6

Получение информации по предзаказу GET /api/lite/pub/preorder нет Получает информацию по предзаказу (метод доступен только если заказ еще в состоянии предзаказа)  

-по новой dto заказа

2

Проверка адреса сбора на возможность обслуживания GET /api/lite/pub/check_pickup_location нет

По указанному населенному пункту (код по базе ФИАС), возвращает возможность указание данного адреса как точки сбора.

в кактусе - нетенантная таблица с фиас кодами доступных городов сбора и опциональными часами сбора

залить данные от gd

 

8

Список товарных предложений/предложение GET /api/lite/pub/offer нет

Возвращает список товаров + цены + фото

-добавить фото

 

 

 

1

Создание заказа для виджета POST /api/lite/pub/order нет Для указанного домена, возможность оформить заказ из виджета обычному покупателю

-по новой dto

4

Методы для административного интерфейса Кактус Лайт
Авторизация POST /api/lite/auth

Создает новую пользовательскую сессию, получая токен.

С данным токеном возможно последующее обращение к API.

 
Запрос данных аккаунта
(админский)
GET /api/lite/account_info session token

Возвращает сведения о текущем аккаунте – имя аккаунта, баланс, настройки и т.п.

 
Информация о датах приезда курьера GET /api/lite/pickup_dates session token

Возвращает информацию о датах приезда курьера за указанный период.

 

 

-в кактусе из настроек заявок на сбор выбираются ближайшие доступные дни. с учетом города сбора и доступного времени сбора - стоит скопировать реализацию настроек в части календаря в нетенантую область чтобы можно было разом для всех учетных записей лайта править

 

часы сбора и географию брать в той же таблице как в методе /api/lite/pub/check_pickup_location

5

Перечень уведомлений для пользователя GET /api/lite/notifications session token Возвращает информацию об уведомлениях для пользователя. Либо по с фильтрацией по последним (с глубиной выборки), либо по определенному ID сообщения.  

отложили

Сводка по аккаунту GET /api/lite/brief_report session token

Возвращает срез отчетности по аккаунту.

Например, информация о заказах (общая).

  -рефакторинг в отдельный сервис имеющихся методов отчетов DevApiController:

reportGetOrderCount, reportGetOrderMeanBill, reportGetOrderSum

-вызов этих методов из апи лайта

8

Запрос списка заказов / определенного заказа

GET /api/lite/order session token

Возвращает информацию о списке заказов, или о конкретном заказе. Возможно задавать фильтрацию, а также требуемый набор полей.

-по новой dto или ее расширенной версии для админа магазина

-фильтрация по статусам, меткам, строке(номер заказа, телефон покупателя, фио покупателя)

-набор полей, задаваемый в запросе пока не делаем

4

Сохранение настроек точки сбора POST /api/lite/settings/pickup session token

Сохраняет информацию об адресе и контактах для сбора заказов

 
Проверка доступности домена 3 уровня GET /api/lite/settings/domainAlias session token Проверка свободного желаемого домена 3 уровня  
Обновление домена 3 уровня POST /api/lite/settings/domainAlias session token Обновление текущего домена 3 уровня (помимо автосозданного)  
Сохранение настроек уведомлений POST /api/lite/settings/user_notification session token

Сохраняет настройки уведомлений пользователя о событиях

  отложили
Запрос настроек виджета чекаута GET /api/lite/settings/checkout   Выводит настройки виджета чекаута  
Сохранение настроек работы виджета чекаута POST /api/lite/settings/checkout session token

Сохраняет настройки виджета чекаута

-добавить тенантую сущность настроек виджета с указанными полями

 

 

 

 

 

2

Список товарных предложений/предложение GET /api/lite/offer session token

Возвращает список товаров + цены + фото

 
Создание / обновление товарного предложения POST /api/lite/offer session token

Обновление полей товара, цен, веса, отображения в каталоге

 

 

 

 

 

 

 

 

3

Создание/удаление картинки к товару

POST /api/lite/offer/image

DELETE /api/lite/offer/image

session token создание картинки к товару с ресайзом / удаление указанной картинки

-интеграция с хранилищем картинок + ресайз картинок

 

8

Обновление параметров кропа картинки к товару POST /api/lite/offer/image/crop session token Обновляет параметры кропа (обрезки) картинки  
Создание/редактирование/удаление метки

POST /api/lite/tag

DELETE /api/lite/tag

session token Редактирование меток для заказов

 

4

Получение списка меток GET /api/lite/tag session token Получить все созданные метки заказов 1
Создание заказа POST /api/lite/order session token

Возможность создать новый заказ.

Также, возможность создать заказ в статусе “Предзаказ”, когда только указана табличная часть, а все остальное должен заполнить покупатель

-если полный заказ: копия метода публичного создания заказа

-если предзаказ: не проверять данные заказа не относящиеся к табличной части в OrderDocManager (по наличию домена определить что учетка - лайт и не проверять)

 

3

Заказ → обновление контактной информации получателя

POST /api/lite/order/receiver session token

Имя, телефон, email

 

-используется новая dto заказа

-обрабатывается только та ее часть которая относится к указанным данным: в заказе не обновлются никакие иные поля

 

2

Заказ → обновление товарной части POST /api/lite/order/items session token Обновить только товарную часть заказа  

-аналогично

2

Заказ → упаковать POST /api/lite/order/packing session token Помечает заказ упакованным

-вызывается быстрая упаковка в одно место

4

Заказ → распаковать DELETE /api/lite/order/packing session token Удаляет упаковку заказа

-распроводит все имеющиеся упакованные места

2

Заказ → пометить оплаченным получателем POST /api/lite/order/payment session token Помечает заказ полностью оплаченным

-ставит статус PAID в заказе

1

Заказ → снять пометку оплаты заказа получателем DELETE /api/lite/order/payment session token

Удаляет оплату заказа

(warning)имеется ввиду отметка об оплате заказа со стороны покупателя (расчеты между покупателем и пользователем системы), не путать с оплатой доставки заказа (расчеты между пользователем системы и Кактус Лайт) - для этого есть отдельный метод.

-ставит статус PAID в заказе

0

Заказ → установить метку на заказе POST /api/lite/order/tag session token Устанавливает метку на заказ 2
Заказ → снять метку с заказа DELETE /api/lite/order/tag session token Снимает метку с заказа 2
Заказ → получить инвойс + стикер к заказу GET /api/lite/order/invoice_and_stiker session token Получает инвойс для заказа (также содержит стикер)

-dlv - сделать слепленную ПФ (инвойс + стикер), добавить в enum запроса ПФ

-кактус: вызывать при упаковке места ПФ с указанным enum

-по вызову данного метода апи - возвращение base64 с данными ПФ

3

Оплатить доставку заказа/заказов POST /api/lite/order_delivery_payment session token

Блокирует средства с баланса для указанного перечня заказов.

 

-реализовать регистр баланса аккаунта (16)

-документ оплаты со статусами подготовлен (средства блокируются) и оплачен (средства списаны)

?требуется описание схемы работы

Отменить оплату доставки заказа/заказов DELETE /api/lite/order_delivery_payment session token Отменяет оплату заказа   ?требуется описание схемы работы
Оформить вызов курьера POST /api/lite/courier_call session token Создает в системе заявку на вызов курьера   - не делаем. заявка на вызов курьера автоматом делается при успешной оплате доставки указанных заказов в методе order_delivery_payment
Отменить вызов курьера DELETE /api/lite/courier_call session token Удаляет заявку на вызов курьера  

-удаляет по humanId

2

Получить список транзакций GET /api/lite/transaction session token С фильтрацией по дате, номеру заказу (или номеру трекинга)   ?требуется описание схемы работы
Создать счет на оплату и получить информацию для оплаты POST /api/lite/payment session token

Создает новый счет к оплате на указанную сумму, затем возвращает данные для последующей оплаты (PayU)

  ?требуется описание схемы работы
Методы для работы с доставкой (в большей степени требуются для работы чекаута)
Получить тарифы и способы доставки для указанного населенного пункта GET /api/dlv/tariffs нет с фильтрацией по городу (guid ФИАС) - запрос тарифа от точки сбора до указанной точки

-добавить fias код в сущность адреса

-авторизация по домену

-добавить проксирование в кактусе с возможностью на лету

в тарифы добавить процентную и фиксированную часть из настроек виджета данного клиента

4

Получить список пунктов выдачи заказов GET /api/dlv/delivery_points нет

с фильтрацией по городу (guid ФИАС) / по курьерской службе, получает доступный список пунктов выдачи заказов.

Возможно запрашивать краткий и полный списки, с фильтрацией по ID пункта выдачи.

-авторизация по домену

-прокси до dlv по методу запроса постаматов и фильтром по городу (фиас), коду постамата

4

 

Описание методов (old)

/api/lite/pub/order

Получение информации по заказу (публичный)

/api/lite/pub/order

Метод получает информацию о заказе, доступную покупателю. например по ссылке из email

Обязательный параметр: query - содержащий номер (id) заказа.

например, ?id=FF6Z-000017

 

Результат запроса

Найденный заказ, по форамату аналогичный методу добавления заказа (POST /api/lite/pub/order)

{
    "orders": [
        {
            "success": true,
            "comment": "",
            "id": "FF6Z-000017",
            "date": "2019-06-25 16:48:36",
            "updateTs": "2019-06-25 16:48:44.180",
            "confirmStatus": "APPROVED",
            "paymentStatus": "NOT_PAID",
            "status": "NEW",
            "paymentMethodCode": "no-cod",
            "trackingNumber": null,
            "customData": null,
            "totalOrderSum": 3715,
            "delivery": {
                "deliveryCode": "GLOBAL_DELIVERY",
                "timeFrom": "09:00",
                "timeTo": "20:00",
                "desiredDeliveryDate": null,
                "deliveryComment": "",
                "pickupPointId": "",
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": "",
                    "house": "",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Москва",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "",
                    "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "areaFias": null,
                    "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                    "settlementFias": null
                },
                "receiver": {
                    "name": "Тест4",
                    "surname": "",
                    "patronymic": "",
                    "phone": "9151321211",
                    "alternativePhone": "",
                    "email": ""
                },
                "type": "COURIER",
                "courier": "Global Delivery",
                "trackingLink": "https://global-delivery.ru/monitoring/",
                "logoUrl": "https://app.kak2c.ru/VAADIN/themes/valo-oms/img/logos/delivery-resized/global_delivery.png"
            },
            "items": [
                {
                    "num": 1,
                    "id": "1001",
                    "quantity": 8,
                    "price": 237,
                    "name": "Lavazza Passionale",
                    "img": "https://img.kak2c.ru/i/c/H/lQS7nFGe_c.png?1561052854",
                    "variants": null
                },
                {
                    "num": 2,
                    "id": "1002",
                    "quantity": 5,
                    "price": 289,
                    "name": "Lavazza Bio Organic",
                    "img": "https://img.kak2c.ru/i/C/f/jhqOneIC_c.png?1561052854",
                    "variants": null
                },
                {
                    "num": 3,
                    "id": "delivery",
                    "quantity": 1,
                    "price": 374,
                    "name": "Доставка",
                    "img": null,
                    "variants": null
                }
            ],
            "tags": [],
            "packings": null,
            "expenses": null,
            "needCustomerPayment": false,
            "customerPaymentInProcess": false,
            "promocode": "testpercent",
            "promocodeAppliedDiscount": 1169,
            "c": "29726802-015c-3c2b-14d2-9f84e1a8be9a"
        }
    ]
}

 

Описание методов (old)

Копия /api/lite/file/image

Закачка картинки в облако

/api/lite/file/image

Закачка картинки в облако и получение url

Одновременно выполняет ресайз картинки в несколько разрешений, аналогично методу POST /api/lite/products/image


Принимает файл в виде multipart запроса в параметре upfile.

Хедер - только Authorization


Пример из Postman:

image-1592078071688.png

Пример ответа:

{
    "success": true,
    "url": "https://storage.yandexcloud.net/images-k2c/66ac26ec-08b2-4d4a-ae22-44c182847984.jpg",
    "id": "66ac26ec-08b2-4d4a-ae22-44c182847984.jpg"
}

Импорт/экспорт

Импорт и экспорт номенклатуры, заказов, итд

Импорт/экспорт

/api/lite/import/upload

Загрузка файла номенклатуры  (/api/lite/import/upload)

POST /api/lite/import/upload

/api/lite/import/upload

Используется заголовок запроса Content-type: multipart/form-data.

В качестве параметров запроса передается:

После успешной загрузки, возвращается идентификатор загруженного файла, fieldMatching - последнее актуальное сопоставление полей, header - распознанная первая строка, с автоматически примененным сопоставлением полей из fieldMatching, body - несколько первых строк файла с данными (начиная со второй строки), columnMatching - сопоставление номера столбца и распознанного ключа fieldMatching.

Положительный результат запроса: 

Пример
{
   "success":true,
   "id":"1002",
   "rowsCount":8,
   "totalRows":9,
   "lastParsedRow":8,
   "headerRow":0,
   "header":[
      {
         "matchedId":"id",
         "title":"Код в Kak2c",
         "id":"0"
      },
      {
         "matchedId":"extId",
         "title":"Внешний код",
         "id":"1"
      },
      {
         "matchedId":"article",
         "title":"Артикул",
         "id":"2"
      },
      {
         "matchedId":"shortName",
         "title":"Наименование",
         "id":"3"
      },
      {
         "matchedId":null,
         "title":"Полное наименование",
         "id":"4"
      },
      {
         "matchedId":null,
         "title":"Штрихкоды",
         "id":"5"
      },
      {
         "matchedId":"defaultImage",
         "title":"URL картинки",
         "id":"6"
      },
      {
         "matchedId":null,
         "title":"Код варианта",
         "id":"7"
      },
      {
         "matchedId":null,
         "title":"Код родительского варианта",
         "id":"8"
      },
      {
         "matchedId":null,
         "title":"Цвет",
         "id":"9"
      },
      {
         "matchedId":null,
         "title":"Размер",
         "id":"10"
      },
      {
         "matchedId":"VAT",
         "title":"Ставка НДС",
         "id":"11"
      },
      {
         "matchedId":null,
         "title":"Количество (GLOBAL_DELIVERY)",
         "id":"12"
      },
      {
         "matchedId":null,
         "title":"Количество (Tempoline)",
         "id":"13"
      },
      {
         "matchedId":"price",
         "title":"Розничная цена",
         "id":"14"
      },
      {
         "matchedId":null,
         "title":"Цена до скидки",
         "id":"15"
      },
      {
         "matchedId":null,
         "title":"OZON",
         "id":"16"
      },
      {
         "matchedId":null,
         "title":"GOODS",
         "id":"17"
      },
      {
         "matchedId":null,
         "title":"BERU",
         "id":"18"
      }
   ],
   "body":[
      {
         "rowNum":1,
         "rowBody":{
            "0":"1067",
            "1":"300212295",
            "2":"4620771200101-4",
            "3":"#Спрут_экстра от сорняков, Спрут Экстра ВР, Октябрина Апрелевна 100 мл",
            "4":"#Спрут_экстра от сорняков, Спрут Экстра ВР, Октябрина Апрелевна 100 мл",
            "5":"4620771200100",
            "6":"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Solomin_field.JPG/1200px-Solomin_field.JPG",
            "7":"20%",
            "8":"0",
            "9":"0",
            "10":"",
            "11":"",
            "12":"",
            "13":"100",
            "14":"257.00",
            "15":"",
            "16":"",
            "17":"",
            "18":""
         }
      },
      {
         "rowNum":2,
         "rowBody":{
            "0":"1049",
            "1":"300204695",
            "2":"4620771201909-1",
            "3":"#Садовый_вар дезинфекция ран, Октябрина Апрелевна 150 гр",
            "4":"#Садовый_вар дезинфекция ран, Октябрина Апрелевна 150 гр",
            "5":"4620771201893",
            "6":"https://img2.wbstatic.net/big/new/9240000/9243894-1.jpg",
            "7":"20%",
            "8":"0",
            "9":"0",
            "10":"",
            "11":"",
            "12":"",
            "13":"100",
            "14":"77.00",
            "15":"",
            "16":"",
            "17":"",
            "18":""
         }
      }
   ],
   "fieldMatching":{
      "isNovelty":"новинка",
      "available":"доступен",
      "VAT":"ставка ндс",
      "description":"описание",
      "stockAvailable":"остаток",
      "price":"цена",
      "id":"id",
      "extId":"внешний id",
      "variantId":"ид варианта",
      "barcode":"штрихкод",
      "defaultImage":"url картинки",
      "height":"высота",
      "brandName":"бренд",
      "stockReserved":"резерв",
      "productId":"ид продукта",
      "oldPrice":"старая цена",
      "weight":"вес",
      "isBestseller":"хит",
      "article":"артикул",
      "deleted":"удален",
      "depth":"глубина",
      "width":"ширина",
      "countryOfOrigin":"страна производитель",
      "shortName":"наименование",
      "price$Цена до скидки":"цена: цена до скидки",
      "price$Розничная цена":"цена: розничная цена",
      "attribute$material":"атрибут: материал",
      "feature$color":"свойство: цвет",
      "feature$size":"свойство: размер"
   },
   "columnMatching":{
      "0":"id",
      "11":"VAT",
      "1":"extId",
      "2":"article",
      "3":"shortName",
      "14":"price",
      "6":"defaultImage"
   },
   "importMethod":"UPDATE",
   "replacePictures":false,
   "searchField":"ID"
}

Отрицательный результат запроса:

Пример ошибки
{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]  
}
Импорт/экспорт

/api/lite/import/preview

 

Получить первые N строк загруженного файла (/api/lite/import/preview)

/api/lite/import/preview

параметр: id (Идентификатор загруженного файла)

например api/lite/import/preview?id=1001

параметр count (количество строк документа. Если не передан, то по умолчанию - 25)

например api/lite/import/preview?id=1001&count=10

Положительный результат запроса: 

{
   "success":true,
   "id":"1001",
   "rowsCount":1,
   "totalRows":9,
   "lastParsedRow":0,
   "headerRow":0,
   "header":[
      {
         "matchedId":"id",
         "title":"Код в Kak2c",
         "id":"0"
      },
      {
         "matchedId":"extId",
         "title":"Внешний код",
         "id":"1"
      },
      {
         "matchedId":"article",
         "title":"Артикул",
         "id":"2"
      },
      {
         "matchedId":"shortName",
         "title":"Наименование",
         "id":"3"
      },
      {
         "matchedId":null,
         "title":"Полное наименование",
         "id":"4"
      },
      {
         "matchedId":null,
         "title":"Штрихкоды",
         "id":"5"
      },
      {
         "matchedId":"defaultImage",
         "title":"URL картинки",
         "id":"6"
      },
      {
         "matchedId":null,
         "title":"Код варианта",
         "id":"7"
      },
      {
         "matchedId":null,
         "title":"Код родительского варианта",
         "id":"8"
      },
      {
         "matchedId":null,
         "title":"Цвет",
         "id":"9"
      },
      {
         "matchedId":null,
         "title":"Размер",
         "id":"10"
      },
      {
         "matchedId":"VAT",
         "title":"Ставка НДС",
         "id":"11"
      },
      {
         "matchedId":null,
         "title":"Количество (GLOBAL_DELIVERY)",
         "id":"12"
      },
      {
         "matchedId":null,
         "title":"Количество (Tempoline)",
         "id":"13"
      },
      {
         "matchedId":"price",
         "title":"Розничная цена",
         "id":"14"
      },
      {
         "matchedId":null,
         "title":"Цена до скидки",
         "id":"15"
      },
      {
         "matchedId":null,
         "title":"OZON",
         "id":"16"
      },
      {
         "matchedId":null,
         "title":"GOODS",
         "id":"17"
      },
      {
         "matchedId":null,
         "title":"BERU",
         "id":"18"
      }
   ],
   "body":[
      {
         "rowNum":1,
         "rowBody":{
            "0":"1067",
            "1":"300212295",
            "2":"4620771200101-4",
            "3":"#Спрут_экстра от сорняков, Спрут Экстра ВР, Октябрина Апрелевна 100 мл",
            "4":"#Спрут_экстра от сорняков, Спрут Экстра ВР, Октябрина Апрелевна 100 мл",
            "5":"4620771200100",
            "6":"https://upload.wikimedia.org/wikipedia/commons/thumb/b/b5/Solomin_field.JPG/1200px-Solomin_field.JPG",
            "7":"20%",
            "8":"0",
            "9":"0",
            "10":"",
            "11":"",
            "12":"",
            "13":"100",
            "14":"257.00",
            "15":"",
            "16":"",
            "17":"",
            "18":""
         }
      }
   ],
   "fieldMatching":{
      "isNovelty":"новинка",
      "brandName":"бренд",
      "stockReserved":"резерв",
      "productId":"ид продукта",
      "oldPrice":"старая цена",
      "available":"доступен",
      "VAT":"ставка ндс",
      "description":"описание",
      "weight":"вес",
      "isBestseller":"хит",
      "stockAvailable":"остаток",
      "article":"артикул",
      "deleted":"удален",
      "depth":"глубина",
      "price":"розничная цена",
      "width":"ширина",
      "id":"код в kak2c",
      "extId":"внешний код",
      "countryOfOrigin":"страна производитель",
      "variantId":"ид варианта",
      "shortName":"наименование",
      "barcode":"штрихкод",
      "defaultImage":"url картинки",
      "height":"высота"
   },
   "columnMatching":{
      "0":"id",
      "11":"VAT",
      "1":"extId",
      "2":"article",
      "3":"shortName",
      "14":"price",
      "6":"defaultImage"
   },
   "importMethod":"UPDATE",
   "searchField":"ID"
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Импорт/экспорт

/api/lite/import/task

Список заданий(подробная информация по заданию) (/api/lite/import/task)

/api/lite/import/task

 

Положительный результат запроса: 

{
    "success": true,
    "recordsTotal": 2,
    "tasks": [
        {
            "success": true,
            "date": "2020-07-13 18:58:57",
            "id": "1002",
            "processed": false,
            "enqueued": false,
            "rowsTotal": 9,
          	"emptyRowsCount":0,
            "lastProcessedRow": 0,
            "itemsProcessedCount": 0,
            "itemsFailedCount": 0,
            "progressPercentage": 0,
            "failedRowsNum": "",
            "itemsCreatedCount": null,
            "itemsUpdatedCount": null,
            "startTime": "2020-07-13 18:58:57",
            "finishTime": null
        },
        {
            "success": true,
            "date": "2020-07-12 17:45:00",
            "id": "1001",
            "processed": true,
            "enqueued": true,
            "rowsTotal": 9,
          	"emptyRowsCount":0,
            "lastProcessedRow": 9,
            "itemsProcessedCount": 9,
            "itemsFailedCount": 0,
            "progressPercentage": 100,
            "failedRowsNum": "",
            "itemsCreatedCount": 0,
            "itemsUpdatedCount": 9,
            "startTime": "2020-07-13 16:44:12,
            "finishTime": "2020-07-13 16:45:22
        }
    ]
}

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/import/task?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

параметр: templateType=SKU тип заданий для отображения. Возможные варианты: [SKU, ORDER] Если не передан, то по умолчанию - SKU

параметр: id (Идентификатор задания, если передан, возвращается подробная информация по заданию)

например api/lite/import/task?id=1001

Положительный результат запроса: 

{
    "success": true,
    "date": "2020-07-13 18:58:57",
    "id": "1002",
    "processed": false,
    "enqueued": false,
    "rowsTotal": 9,
  	"emptyRowsCount":0,
    "lastProcessedRow": 0,
    "itemsProcessedCount": 0,
    "itemsFailedCount": 0,
    "progressPercentage": 11,
    "failedRowsNum": "",
    "itemsCreatedCount": null,
    "itemsUpdatedCount": null,
    "startTime": null,
    "finishTime": null,
    "warehouseName": "Свой склад",
    "fileUrl": "https://storage.yandexcloud.net/images-k2c/f328ff56-ec93-4663-b747-7ee96957ca8e.xls",
    "fieldMatching": {
        "isNovelty": "новинка",
        "brandName": "бренд",
        "stockReserved": "резерв",
        "productId": "ид продукта",
        "oldPrice": "старая цена",
        "available": "доступен",
        "VAT": "ставка ндс",
        "description": "описание",
        "weight": "вес",
        "isBestseller": "хит",
        "stockAvailable": "остаток",
        "article": "артикул",
        "deleted": "удален",
        "depth": "глубина",
        "price": "розничная цена",
        "width": "ширина",
        "id": "код в kak2c",
        "extId": "внешний код",
        "countryOfOrigin": "страна производитель",
        "variantId": "ид варианта",
        "shortName": "наименование",
        "barcode": "штрихкод",
        "defaultImage": "url картинки",
        "height": "высота"
    },
     "processingLog": [
      	{
      		"time":"2020-07-30 11:25:14",
      		"strNum":1,
      		"event":"Строка успешно обработана",
      		"level":"INFO"
   		},
        {
            "time": "2020-08-05 16:15:53",
            "strNum": 2,
            "event": "Обнаружена пустая строка",
            "level": "WARNING"
        },
        {
            "time": "2020-08-05 16:15:53",
            "strNum": 3,
            "event": "Не задано наименование для нового продукта.",
            "level": "ERROR"
        }
    ],
    "importType" : "UPDATE", //"CREATE" Режим загрузки номенклатуры
	"searchField" : "ID", //"EXTID" | "ARTICLE" | "BARCODE" Сопоставление номенклатуры
	"replacePictures" : false, //Заменять изображения
	"updateRests", : false //Загружать остатки
  	"clearEmptyValues" : false //Стирать значения, если они пустые
}

 

 

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

Обновить настройки задания  (/api/lite/import/task)

/api/lite/import/task

параметр: id (идентификатор задания)

например api/lite/import/task?id=1001

Пример запроса: 

{
	"id": "ed83074b-0072-43b0-a3fb-3f741cc8dc21", //Идентификатор загруженного файла
	"warehouseName": "Свой склад", //Наименование склада
    "fieldMatching" : {
			"id":"Код в Kak2c",
			"article":"Артикул",
			"extId":"Внешний ИД",
			"barcode":"Штрихкоды",
			"shortName":"Наименование",
    		"description":"Полное наименование",
			"vat":"Ставка НДС",
			"stockAvailable":"Количество",
			"price":"Цена",
			"currency":"Валюта",
			"picture":"URL картинки"
	}, //Сопоставление полей
	"importType" : "UPDATE", //"CREATE" Режим загрузки номенклатуры
	"searchField" : "ID", //"EXTID" | "ARTICLE" | "BARCODE" Сопоставление номенклатуры
	"replacePictures" : false, //Заменять изображения
	"updateRests", : false //Загружать остатки
  	"clearEmptyValues" : false //Стирать значения, если они пустые
}

Положительный результат запроса: 

Пример
{
    "success": true,	
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Импорт/экспорт

/api/lite/import/process

Запустить обработку загруженного файла (/api/lite/import/process)

/api/lite/import/process

параметр: id  (Идентификатор загруженного файла) обязательный

например api/lite/import/process?id=ed83074b-0072-43b0-a3fb-3f741cc8dc21

Положительный результат запроса: 

{
    "success": true,
}

Отрицательный результат запроса:


{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Импорт/экспорт

/api/lite/import/field_list

Получить список возможных полей номенклатуры(/api/lite/import/field_list)

/api/lite/import/field_list

Положительный результат запроса: 

{
    "success": true,
    "fields": {
        "id": "ID",
        "extId": "Внешний ID",
        "shortName": "Наименование",
        "article": "Артикул",
        "barcode": "Штрихкод",
        "brandName": "Бренд",
        "vat": "Ставка НДС",
        "defaultImage": "URL картинки",
        "productId": "ID Продукта",
        "productExtId": "Внешний ID продукта",
        "weight": "Вес (кг)",
        "width": "Ширина (см)",
        "height": "Высота (см)",
        "depth": "Глубина (см)",
        "tnved": "ТНВЭД",
        "type": "Тип",
        "internationalDescription": "Международное описание товара",
        "isBestseller": "Хит",
        "isNovelty": "Новинка",
        "description": "Описание",
        "countryOfOrigin": "Страна производитель",
        "stockTotal": "Остаток",
        "stockReserved": "В резерве",
        "available": "Доступен",
        "price$Цена до скидки": "Цена: цена до скидки",
        "price$Розничная цена": "Цена: розничная цена",
        "feature$size": "Свойство: размер",
        "feature$color": "Свойство: цвет"
    }
}

Отрицательный результат запроса:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Импорт/экспорт

/api/lite/export/sku

Список результатов экспорта(подробная информация по экспорту) (/api/lite/export/sku)

/api/lite/export/sku

Положительный результат запроса: 

{
  	"success": true,
  	"recordsTotal": 2
    "exportResults": [
        {
            "success": true,
            "id": "1001",
            "fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
            "fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
            "fileSize": "122 KB",
            "rowsCount": 296,
            "startTime": "2020-08-27 15:48:25",
            "finishTime": "2020-08-27 15:48:26",
            "cloudUploadFinishTime": "2020-08-27 15:48:27"
        },
        {
            "success": true,
            "id": "1000",
            "fileUrl": "https://storage.yandexcloud.net/images-k2c/452e74b0-3660-4c80-bfcb-78034097b720.xls",
            "fileID": "452e74b0-3660-4c80-bfcb-78034097b720.xls",
            "fileSize": "122 KB",
            "rowsCount": 296,
            "startTime": "2020-08-27 15:27:53",
            "finishTime": "2020-08-27 15:27:54",
            "cloudUploadFinishTime": "2020-08-27 15:27:55"
        }
    ]
}

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/export/sku?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

 

параметр: id (Идентификатор результата, если передан, возвращается подробная информация по результату)

например /api/lite/export/sku?id=1001

Положительный результат запроса: 

{
    "success": true,
    "id": "1001",
    "fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
    "fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
    "fileSize": "122 KB",
    "rowsCount": 296,
    "startTime": "2020-08-27 15:48:25",
    "finishTime": "2020-08-27 15:48:26",
    "cloudUploadFinishTime": "2020-08-27 15:48:27"
}

 

 

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

Инициировать экспорт товаров  (/api/lite/export/sku)

/api/lite/export/sku

Пример запроса: 

{
    "warehouse":null, //ИД Склада(фильтр)
    "exportStock":true, //Выгружать остатки
    "exportPrice":true, //Выгружать цены
    "exportFeatures":true, //Выгружать свойства
    "exportAttributes":true, //Выгружать атрибуты
    "exportPictures":true, //Выгружать картинки
  	"exportArchive":false //Выгружать архивные товары
}

Положительный результат запроса: 

Пример
{
    "success": true,
    "id": "1000",
    "fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
    "fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
    "fileSize": "122 KB", 	//Размер файла(строка)
    "rowsCount": 296, 	//Количество строк в файле
    "startTime": "2020-08-27 15:48:25",		//Время начала подготовки файла
    "finishTime": "2020-08-27 15:48:26", 	//Время окончания подготовки файла
    "cloudUploadFinishTime": "2020-08-27 15:48:27" 	//Время окончания загрузки в облако
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Импорт/экспорт

/api/lite/import/templates/sku

Получение шаблона импорта номенклатуры (с вариантами)

/api/lite/import/templates/sku

В ответ возвращается в бинарном виде с типом application/octet-stream xls файл для выгрузки в браузер пользователю

В файл записываются первые 10 товаров аккаунта

Можно задавать ему название "ItemTemplate.xls"

 

Успех:

application/octet-stream

 

Ошибка: 

status 500

{
"timestamp": "2020-04-03T10:38:46.343+0000",
"status": 500,
"error": "Internal Server Error",
"message": "12345",
"path": "/api/lite/settings/templates/items"
}
Импорт/экспорт

/api/lite/export/order

Список результатов экспорта заказов(подробная информация по экспорту) (/api/lite/export/order)

/api/lite/export/order

Положительный результат запроса: 

{
  	"success": true,
  	"recordsTotal": 2
    "exportResults": [
        {
            "success": true,
            "id": "1001",
            "fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
            "fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
            "fileSize": "122 KB",
            "rowsCount": 296,
            "startTime": "2020-08-27 15:48:25",
            "finishTime": "2020-08-27 15:48:26",
            "cloudUploadFinishTime": "2020-08-27 15:48:27"
  			"requestJson":"{\"fromDate\":\"2020-09-25 20:31:00\",\"exportTechData\":false,\"orderType\":\"CUSTOM\",\"orderSubType\":\"KAK2C_SUBSCRIPTION\",\"exportItems\":false,\"searchDateType\":\"CREATE_DATE\",\"toDate\":\"2020-12-01 20:31:07\",\"exportTags\":true,\"extendedAddress\":false,\"exportPackages\":false}",
   			"processed":true,
   			"rowsTotal":987,
   			"itemsProcessedCount":987,
   			"itemsFailedCount":0,
   			"processingLog":[]
        },
        {
            "success": true,
            "id": "1000",
            "fileUrl": "https://storage.yandexcloud.net/images-k2c/452e74b0-3660-4c80-bfcb-78034097b720.xls",
            "fileID": "452e74b0-3660-4c80-bfcb-78034097b720.xls",
            "fileSize": "122 KB",
            "rowsCount": 296,
            "startTime": "2020-08-27 15:27:53",
            "finishTime": "2020-08-27 15:27:54",
            "cloudUploadFinishTime": "2020-08-27 15:27:55"
            "processed":true,
   			"rowsTotal":987,
   			"itemsProcessedCount":987,
   			"itemsFailedCount":0,
   			"processingLog":[]
        }
    ]
}

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/export/order?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

 

параметр: id (Идентификатор результата, если передан, возвращается подробная информация по результату)

например /api/lite/export/order?id=1001

Положительный результат запроса: 

{
    "success": true,
    "id": "1001",
    "fileUrl": "https://storage.yandexcloud.net/images-k2c/fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
    "fileID": "fd5d5bc5-9792-4fee-be5e-51dd93e853ea.xls",
    "fileSize": "122 KB",
    "rowsCount": 296,
    "startTime": "2020-08-27 15:48:25",
    "finishTime": "2020-08-27 15:48:26",
    "cloudUploadFinishTime": "2020-08-27 15:48:27"
    "processed":true,
   	"rowsTotal":987,
   	"itemsProcessedCount":987,
   	"itemsFailedCount":0,
   	"processingLog":[]
}

 

 

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Инициировать экспорт заказов  (/api/lite/export/order)

(асинхронный запрос)

/api/lite/export/order

Пример запроса: 

{
    "searchDateType":"CREATE_DATE", //TAKEOUT_DATE, DELIVERY_DATE, RETURN_DATE - Метод отбора (по дате создания/отгрузки/доставки/возврата)
    "fromDate":"2020-08-01 00:00:00", //Дата от
    "toDate":"2020-10-01 00:00:00", //Дата до
    "extendedAddress":true, //Выгрузить адрес по частям
    "exportTags":true, //Выгрузить метки
    "exportItems":true, //Данные по товарам (Может значительно замедлить экспорт, выполняется запрос регистров, ограничение в 1000 записей)
    "exportPackages":true, //Данные по транспортным местам
  	"exportPackedItems": true, //Данные по упакованным товарам
    "exportTechData":true, //Технические данные
   	"orderType":"CUSTOM", //STANDARD | KAKTUS_DOSTAVKA_V2   У обычных заказов - STANDARD
   	"orderSubType":"KAK2C_SUBSCRIPTION", //У обычных заказов он null. 
    "ids":["49379964-0003-2", "49379964-0003-3"], //Если требуется выгрузить заказы с указанными HumanId
  	"city":"Новосибирск",
	"deliveryInfos":["f7c887bc-2161-a53e-0c98-8180f458b79d"], //Список служб доставки
	"orderTags":["Метка"], //список ИМЁН меток (не гуидов!)
	"promocode":"ajaton3000",
	"statuses":["ORDER_INFO_REQUIRE_PAYMENT"], //Список статусов заказа
	"variantId":"982880" //sku humanId
}
"orderType" -  отбор по типу заказа. Если не передан, то возвращаются все типы.
"orderSubType" - Отбор по подтипу заказа. У обычных заказов он null.  Отбор моно проводить как по совокупности (тип + подтип), так и по отдельности (тип или подтип). Если тип и подтип не заданы, возвращаются все заказы в заданном промежутке дат (fromDate, toDate). Если задан orderSubType == "KAK2C_SUBSCRIPTION", название и количество колонок xls документа может изменится, для отображения данных по подпискам.
Для экспорта обычных заказов, orderType должен быть передан "STANDARD", а orderSubType можно не передавать, либо передать null.
Для экспорта подписок, "orderSubType": "KAK2C_SUBSCRIPTION", а "orderType": "CUSTOM".

Положительный результат запроса: 

Пример
{
    "id": "1000",
    "itemsFailedCount": 0,
    "itemsProcessedCount": 0,
    "processed": false,
    "processingLog": [],
    "requestJson": "{\"fromDate\":\"2023-07-04 16:17:46\",\"searchDateType\":\"TAKEOUT_DATE\",\"toDate\":\"2023-07-05 16:17:46\",\"exportTags\":true}",
    "success": true
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Импорт/экспорт

Шаблоны подписок

Создание/редактирование шаблона подписок

/api/lite/product/subscription/parse

Создаёт структуру шаблона подписок по заданному шаблону. Все заданные товары должны существовать в кактусе до загрузки шаблона. 

Если тип оплаты recurrent:

Если тип оплаты all_in_moment:

Передаваемые параметры:

Имя Тип Описание
file MultipartFile Файл (.XLS) для парсинга. Пример файла . Возможные значения в payment_method: RECURRENT и ALL_IN_MOMENT
productId String productId товара-подписки
variantId String variantId товара-подписки
startDate (optional) String Дата с которой начинается первое отправление. Если не задано, берётся текущая

При удачном парсинге возвращает структуру шаблона: 

{
    "success": true,
    "productId": "1002",
    "variantId": "1002",
    "type": "SUBSCRIPTION",
    "onlinePaymentType": "recurrent",
    "useShipmentDelayInterval": true,
    "items": [
        {
            "productId": "1002",
            "variantId": "1006",
            "count": 1,
            "subscriptionShipmentNum": 1,
            "shipmentDelayIntervalDays": 30,
            "subscriptionStartDate": "2020-09-10",
            "itemPrice": 120.0
        },
        {
            "productId": "1002",
            "variantId": "1007",
            "count": 1,
            "subscriptionShipmentNum": 1,
            "shipmentDelayIntervalDays": 30,
            "subscriptionStartDate": "2020-09-10",
            "itemPrice": 120.0
        },
        {
            "productId": "1002",
            "variantId": "1008",
            "count": 1,
            "subscriptionShipmentNum": 2,
            "shipmentDelayIntervalDays": 20,
            "subscriptionStartDate": "2020-09-30",
            "itemPrice": 150.0
        },
        {
            "productId": "1002",
            "variantId": "1009",
            "count": 1,
            "subscriptionShipmentNum": 2,
            "shipmentDelayIntervalDays": 20,
            "subscriptionStartDate": "2020-09-30",
            "itemPrice": 150.0
        },
        {
            "productId": "1002",
            "variantId": "1010",
            "count": 1,
            "subscriptionShipmentNum": 3,
            "shipmentDelayIntervalDays": 20,
            "subscriptionStartDate": "2020-10-20",
            "itemPrice": 250.0
        }
    ]
}

Пример ошибки: 

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Update SubscriptionTemplate not implemented yet!\n"
        }
    ]
}

 

Получение информации о шаблоне

/api/lite/product/subscription

Передаваемые параметры:

Имя Тип Описание
id String productId товара-подписки

Пример успешного ответа:

{
    "success": true,
    "productId": "1002",
    "variantId": "1002",
    "type": "SUBSCRIPTION",
    "onlinePaymentType": "recurrent",
    "useShipmentDelayInterval": true,
    "items": [
        {
            "productId": "1002",
            "variantId": "1006",
            "count": 1,
            "subscriptionShipmentNum": 1,
            "shipmentDelayIntervalDays": 30,
            "subscriptionStartDate": "2020-09-10",
            "itemPrice": 120.0
        },
        {
            "productId": "1002",
            "variantId": "1007",
            "count": 1,
            "subscriptionShipmentNum": 1,
            "shipmentDelayIntervalDays": 30,
            "subscriptionStartDate": "2020-09-10",
            "itemPrice": 120.0
        },
        {
            "productId": "1002",
            "variantId": "1008",
            "count": 1,
            "subscriptionShipmentNum": 2,
            "shipmentDelayIntervalDays": 20,
            "subscriptionStartDate": "2020-09-30",
            "itemPrice": 150.0
        },
        {
            "productId": "1002",
            "variantId": "1009",
            "count": 1,
            "subscriptionShipmentNum": 2,
            "shipmentDelayIntervalDays": 20,
            "subscriptionStartDate": "2020-09-30",
            "itemPrice": 150.0
        },
        {
            "productId": "1002",
            "variantId": "1010",
            "count": 1,
            "subscriptionShipmentNum": 3,
            "shipmentDelayIntervalDays": 20,
            "subscriptionStartDate": "2020-10-20",
            "itemPrice": 250.0
        }
    ]
}
Импорт/экспорт

/api/lite/export/purchase_order

Инициировать экспорт заказа поставщику  (/api/lite/export/purchase_order?id=1016)

(синхронный запрос)

/api/lite/export/purchase_order?id=1016

Положительный результат запроса: 
Пример
{
    "success": true,
    "id": null,
    "fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/export_takein_max@panshinteam.com_26.10.2020_16-09-15.xls",
    "fileID": "export_takein_max@panshinteam.com_26.10.2020_16-09-15.xls",
    "fileSize": "8 KB",
    "rowsCount": 12,
    "startTime": "2020-10-26 16:09:14",
    "finishTime": "2020-10-26 16:09:15",
    "cloudUploadFinishTime": "2020-10-26 16:09:16"
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Импорт/экспорт

/api/lite/import/order_field_list

Получить список возможных полей заказа(/api/lite/import/order_field_list)

/api/lite/import/order_field_list

Положительный результат запроса: 

{
    "success": true,
    "fields": {
        "id": "ID заказа",
        "date": "Дата заказа",
        "fullName": "ФИО покупателя",
        "phone": "Телефон",
        "paymentMethodCode": "Способ оплаты",
        "paymentStatus": "Заказ оплачен",
        "email": "Email",
        "post": "Индекс",
        "pvzNum": "Код пункта выдачи",
        "country": "Страна",
        "fullAddress": "Полный адрес",
        "region": "Регион",
        "area": "Район",
        "city": "Город",
        "settlement": "Населенный пункт",
        "street": "Улица",
        "house": "Дом",
        "block": "Корпус",
        "flat": "Квартира",
        "deliveryCode": "Код способа доставки",
        "variantId": "ID товара",
        "variantExtId": "Внешний ID товара",
        "article": "Артикул",
        "barcode": "Штрихкод",
        "price": "Цена",
        "quantity": "Количество",
        "vat": "Ставка НДС"
    }
}

Отрицательный результат запроса:

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Импорт/экспорт

/api/lite/export/sku/movements/json

Получить движения по товару в json формате (/api/lite/export/sku/movements/json?id=MA001)

(синхронный запрос)

/api/lite/export/sku/movements/json?id=MA001

Положительный результат запроса: 
Пример
{
    "success": true,
    "humanId": "MA001",
    "article": "MA001",
    "shortName": "Мастера рисунка и живописи. Випуск 1",
    "extId": null,
    "extId2": null,
    "barcodes": "977253178460500001",
    "movements": [
        {
            "success": true,
            "period": "2020-09-30 03:09:21",
            "humanId": "1000",
            "documentType": "TAKE_IN_FACT",
            "operationType": "PLUS",
            "amountAvailable": 194,
            "amountReserved": 0,
            "sourceDocHumanId": null,
            "sourceDocType": null,
            "warehouseName": "Tempoline - Украина"
        },
		{
            "success": true,
            "period": "2020-11-10 06:11:44",
            "humanId": "1580",
            "documentType": "TAKE_OUT_PACKING",
            "operationType": "MINUS",
            "amountAvailable": 1,
            "amountReserved": 1,
            "sourceDocHumanId": "9098-1715",
            "sourceDocType": "ORDER",
            "warehouseName": "Tempoline - Украина"
        }
        
    ]
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Импорт/экспорт

/api/lite/export/sku/movements

Получить движения по товару в xls файле (/api/lite/export/sku/movements?id=MA001)

(синхронный запрос)

/api/lite/export/sku/movements?id=MA001

Параметр id=MA001 - ид варианта, обязательный
Положительный результат запроса: 
Пример
{
    "success": true,
    "id": null,
    "fileUrl": "https://ycloud.kak2c.ru/items-export-kak2c/export_movement_info@centauria.com.ua_18.11.2020_18-05-26.xls",
    "fileID": "export_movement_info@centauria.com.ua_18.11.2020_18-05-26.xls",
    "fileSize": "190 KB",
    "rowsCount": 1169,
    "startTime": "2020-11-18 18:05:26",
    "finishTime": "2020-11-18 18:05:26",
    "cloudUploadFinishTime": "2020-11-18 18:05:26"
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Импорт/экспорт

/api/lite/export/order/count

Подсчитать кол-во заказов  (/api/lite/export/order/count)

/api/lite/export/order/count

Пример запроса: 

{
    "searchDateType":"CREATE_DATE", //TAKEOUT_DATE, DELIVERY_DATE, RETURN_DATE - Метод отбора (по дате создания/отгрузки/доставки/возврата)
    "fromDate":"2020-08-01 00:00:00", //Дата от
    "toDate":"2020-10-01 00:00:00", //Дата до
    "extendedAddress":true, //Выгрузить адрес по частям
    "exportTags":true, //Выгрузить метки
    "exportItems":true, //Данные по товарам (Может значительно замедлить экспорт, выполняется запрос регистров, ограничение в 1000 записей)
    "exportPackages":true, //Данные по транспортным местам
    "exportTechData":true, //Технические данные
   	"orderType":"CUSTOM", //STANDARD | KAKTUS_DOSTAVKA_V2   У обычных заказов - STANDARD
   	"orderSubType":"KAK2C_SUBSCRIPTION", //У обычных заказов он null. 
    "ids":["49379964-0003-2", "49379964-0003-3"] //Если требуется выгрузить заказы с указанными HumanId
  	"city":"Новосибирск",
	"deliveryInfos":["f7c887bc-2161-a53e-0c98-8180f458b79d"], //Список служб доставки
	"orderTags":["Метка"], //список ИМЁН меток (не гуидов!)
	"promocode":"ajaton3000",
	"statuses":["ORDER_INFO_REQUIRE_PAYMENT"], //Список статусов заказа
	"variantId":"982880" //sku humanId
}
"orderType" -  отбор по типу заказа. Если не передан, то возвращаются все типы.
"orderSubType" - Отбор по подтипу заказа. У обычных заказов он null.  Отбор моно проводить как по совокупности (тип + подтип), так и по отдельности (тип или подтип). Если тип и подтип не заданы, возвращаются все заказы в заданном промежутке дат (fromDate, toDate). Если задан orderSubType == "KAK2C_SUBSCRIPTION", название и количество колонок xls документа может изменится, для отображения данных по подпискам.
Для экспорта обычных заказов, orderType должен быть передан "STANDARD", а orderSubType можно не передавать, либо передать null.
Для экспорта подписок, "orderSubType": "KAK2C_SUBSCRIPTION", а "orderType": "CUSTOM".

Положительный результат запроса: 

Пример
{
    "success": true,
    "count": 2274, //Число заказов в выборке
    "limit": 3000 //Максимальное кол-во заказов, которое может быть выгружено в эксель
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

Импорт/экспорт

/api/lite/import/templates/order

Получение шаблона импорта заказов

/api/lite/import/templates/order

В ответ возвращается в бинарном виде с типом application/octet-stream xls файл для выгрузки в браузер пользователю

В файл записываются первые 10 товаров аккаунта

Можно задавать ему название "orderTemplate.xls"

 

Успех:

application/octet-stream

 

Ошибка: 

status 500

{
"timestamp": "2020-04-03T10:38:46.343+0000",
"status": 500,
"error": "Internal Server Error",
"message": "12345",
"path": "/api/lite/settings/templates/order"
}
Импорт/экспорт

/api/lite/export/order/now

Экспеорт выбранного заказа в Excel (/api/lite/export/order/now)

/api/lite/export/order/now

Параметр id - номер заказа

Положительный результат запроса: 

{
    "success": true,
    "recordsTotal": 1,
    "exportResults": [
        {
            "success": true,
            "id": null,
            "fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/export_orders_info@hot-wave.ru_28.07.2021_09-29-24.xls",
            "fileID": "export_order_4247-2840",
            "fileSize": null,
            "rowsCount": null,
            "startTime": null,
            "finishTime": null,
            "processed": null,
            "rowsTotal": 1,
            "itemsProcessedCount": null,
            "itemsFailedCount": null
        }
    ]
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

 

Импорт/экспорт

/api/lite/export/order/invoice

Экспорт инвойса по номеру заказа (/api/lite/export/order/invoice)

/api/lite/export/order/invoice

Параметр id - номер заказа

Положительный результат запроса: 

{
    "success": true,
    "recordsTotal": 1,
    "exportResults": [
        {
            "success": true,
            "id": null,
            "fileUrl": "https://storage.yandexcloud.net/items-import-kak2c/tl_invoice_test@tempo.ru_31.08.2021_17-34-51.pdf",
            "fileID": "export_invoice_2502-123458",
            "fileSize": null,
            "rowsCount": null,
            "startTime": null,
            "finishTime": null,
            "processed": null,
            "rowsTotal": 1,
            "itemsProcessedCount": null,
            "itemsFailedCount": null
        }
    ]
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

 

 

Импорт/экспорт

api/lite/export/supply

Список результатов экспорта поставок (подробная информация по экспорту) (/api/lite/export/supply)

api/lite/export/supply

Положительный результат запроса: 

{
    "exportResults": [
        {
            "id": "1136",
            "itemsFailedCount": 0,
            "itemsProcessedCount": 0,
            "processed": false,
            "processingLog": [],
            "requestJson": "{\"fromDate\":\"2023-06-03 15:29:54\",\"exportItems\":\"true\",\"suppliers\":[\"8a65065d-7b68-57a7-692d-8d8db78b38cc\"],\"toDate\":\"2023-06-03 15:29:54\",\"statuses\":[\"NEW\"],\"ids\":[]}",
            "success": true
        },
        {
            "cloudUploadFinishTime": "2023-06-03 19:01:57",
            "fileID": "d39741e3-2338-4875-9309-75f7aeceb121.xls",
            "fileSize": "32 KB",
            "fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/d39741e3-2338-4875-9309-75f7aeceb121.xls",
            "finishTime": "2023-06-03 19:01:41",
            "id": "1135",
            "itemsFailedCount": 0,
            "itemsProcessedCount": 46,
            "processed": true,
            "processingLog": [],
            "requestJson": "{\"exportItems\":true,\"suppliers\":[\"b1b74b49-dd24-999d-c1f7-31a7d3afa6e7\",\"11430b37-7f78-1202-f6cf-e4b460d81aca\"],\"statuses\":[]}",
            "rowsCount": 46,
            "rowsTotal": 46,
            "startTime": "2023-06-03 19:01:36",
            "success": true
        }

     ]
}

 

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/export/supply?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

 

параметр: id (Идентификатор результата, если передан, возвращается подробная информация по результату)

например /api/lite/export/supply?id=1001

Положительный результат запроса: 

{
    "cloudUploadFinishTime": "2023-06-05 11:07:00",
    "fileID": "4b205bee-cff2-43e4-adf6-8b44da45ed83.xls",
    "fileSize": "10 KB",
    "fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/4b205bee-cff2-43e4-adf6-8b44da45ed83.xls",
    "finishTime": "2023-06-05 11:07:00",
    "id": "1001",
    "itemsFailedCount": 0,
    "itemsProcessedCount": 11,
    "processed": true,
    "processingLog": [],
    "requestJson": "{\"fromDate\":\"2022-06-03 15:29:54\",\"exportItems\":\"true\",\"suppliers\":[],\"toDate\":\"2023-06-03 15:29:54\",\"statuses\":[\"NEW\"],\"ids\":[]}",
    "rowsCount": 11,
    "rowsTotal": 11,
    "startTime": "2023-06-05 11:06:57",
    "success": true
}

Отрицательный результат запроса:

Пример ошибки: 

 

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

Инициировать экспорт поставок (/api/lite/export/supply)

(асинхронный запрос)

/api/lite/export/supply

Пример запроса: 

{
    "exportItems": "true",  //Данные по товарам (Может значительно замедлить экспорт, выполняется запрос регистров, ограничение в 1000 записей)
    "statuses": ["NEW"], //InfoStatus поставки
    "suppliers": ["8a65065d-7b68-57a7-692d-8d8db78b38cc"], //Id поставщика
    "fromDate": "2022-06-03 15:29:54",  //Дата от
    "toDate": "2023-06-03 15:29:54",  //Дата до
    "ids": []  //Если требуется выгрузить заказы с указанными HumanId
}

Положительный результат запроса:

Пример

{
    "success": true,
    "id": "1001",
    "fileUrl": null,
    "fileID": null,
    "fileSize": null,
    "rowsCount": null,
    "startTime": null,
    "finishTime": null,
    "cloudUploadFinishTime": null
}

Отрицательный результат запроса:

Пример ошибки

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Импорт/экспорт

/api/lite/export/supply/count

Подсчитать кол-во поставок  (/api/lite/export/supply/count)

api/lite/export/supply/count

Пример запроса: 

{
    "exportItems": "true",  //Данные по товарам (Может значительно замедлить экспорт, выполняется запрос регистров, ограничение в 1000 записей)
    "statuses": ["NEW"], //InfoStatus поставки
    "suppliers": ["8a65065d-7b68-57a7-692d-8d8db78b38cc"], //Id поставщика
    "fromDate": "2022-06-03 15:29:54",  //Дата от
    "toDate": "2023-06-03 15:29:54",  //Дата до
    "ids": []  //Если требуется выгрузить заказы с указанными HumanId
}

Положительный результат запроса: 

Пример
{
"success": true,
"count": 2274, //Число поставок в выборке
"limit": 3000 //Максимальное кол-во поставок, которое может быть выгружено в эксель
}

 

Отрицательный результат запроса:

Пример ошибки

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

Дэшборд

Получение отчетов для дэшборда

/api/lite/reports

Возвращает список всех отчетов для дэшборда.

Опционально можно указать список интересующих отчетов, чтобы не загружать  все.

Параметр types, например ?types=report_sales_sum_1,report_sales_avg_order_1

Пример данных по отчетам:

{
  	"success": true,
  	"errors": [],
    "report_sales_sum_1":{
      "currency": "RUB",
      "today": 99500,
      "week": 929000,
      "diffPercent": 12.2,
      "diffDirection": "UP"
    },
    "report_orders_sum_1":{
      "today": 41,
      "week": 120,
      "diffPercent": 8.2,
      "diffDirection": "DOWN"
    },
    "report_sales_avg_order_1":{
      "currency": "RUB",
      "month": 2330,
      "allTime": 1700,
      "diffPercent": 8.2,
      "diffDirection": "DOWN"
    },
    "report_orders_sale_percent_1":{
      "month": 96.5,
      "allTime": 94.2,
      "diffPercent": 8.2,
      "diffDirection": "DOWN"
    },
    "report_sales_dynamic_1":{
      "currency": "RUB",
      "week": 7800,
      "previousWeek": 140000,
      "previousWeekDiffDirection": "UP"
      "previousMonth": 820000,
      "previousMonthDiffDirection": "DOWN"
      "weeklyData":[
        {"point": "Пн", "currentValue": 10, "previousValue": 8},
        {"point": "Вт", "currentValue": 12, "previousValue": 11},
        {"point": "Ср", "currentValue": 10, "previousValue": 8},
        {"point": "Чт", "currentValue": 10, "previousValue": 8},
        {"point": "Пт", "currentValue": 10, "previousValue": 8},
        {"point": "Сб", "currentValue": null, "previousValue": null},
        {"point": "Вс", "currentValue": null, "previousValue": null}
        ],
      "monthlyData":[
        {"point": 1, "currentValue": 10, "previousValue": 8},
        {"point": 2, "currentValue": 12, "previousValue": 11},
        {"point": 3, "currentValue": 10, "previousValue": 8},
        {"point": 4, "currentValue": 10, "previousValue": 8},
       ...
        {"point": 31, "currentValue": null, "previousValue": null}
        ],
      "annuallyData":[
        {"point": "Янв", "currentValue": 10, "previousValue": 8},
        {"point": "Фев", "currentValue": 12, "previousValue": 11},
        {"point": "Мар", "currentValue": 10, "previousValue": 8},
        {"point": "Апр", "currentValue": 10, "previousValue": 8},
       ...
        {"point": "Дек", "currentValue": null, "previousValue": null}
        ]
    },
	"report_sales_dynamic_1_delivered":{
      "currency": "RUB",
      "week": 7800,
      "previousWeek": 140000,
      "previousWeekDiffDirection": "UP"
      "previousMonth": 820000,
      "previousMonthDiffDirection": "DOWN"
      "weeklyData":[
        {"point": "Пн", "currentValue": 10, "previousValue": 8},
        {"point": "Вт", "currentValue": 12, "previousValue": 11},
        {"point": "Ср", "currentValue": 10, "previousValue": 8},
        {"point": "Чт", "currentValue": 10, "previousValue": 8},
        {"point": "Пт", "currentValue": 10, "previousValue": 8},
        {"point": "Сб", "currentValue": null, "previousValue": null},
        {"point": "Вс", "currentValue": null, "previousValue": null}
        ],
      "monthlyData":[
        {"point": 1, "currentValue": 10, "previousValue": 8},
        {"point": 2, "currentValue": 12, "previousValue": 11},
        {"point": 3, "currentValue": 10, "previousValue": 8},
        {"point": 4, "currentValue": 10, "previousValue": 8},
       ...
        {"point": 31, "currentValue": null, "previousValue": null}
        ],
      "annuallyData":[
        {"point": "Янв", "currentValue": 10, "previousValue": 8},
        {"point": "Фев", "currentValue": 12, "previousValue": 11},
        {"point": "Мар", "currentValue": 10, "previousValue": 8},
        {"point": "Апр", "currentValue": 10, "previousValue": 8},
       ...
        {"point": "Дек", "currentValue": null, "previousValue": null}
        ]
    },
	"report_orders_dynamic_1":{
      "currency": "RUB",
      "week": 7800,
      "previousWeek": 140000,
      "previousWeekDiffDirection": "UP"
      "previousMonth": 820000,
      "previousMonthDiffDirection": "DOWN"
      "weeklyData":[
        {"point": "Пн", "currentValue": 10, "previousValue": 8},
        {"point": "Вт", "currentValue": 12, "previousValue": 11},
        {"point": "Ср", "currentValue": 10, "previousValue": 8},
        {"point": "Чт", "currentValue": 10, "previousValue": 8},
        {"point": "Пт", "currentValue": 10, "previousValue": 8},
        {"point": "Сб", "currentValue": null, "previousValue": null},
        {"point": "Вс", "currentValue": null, "previousValue": null}
        ],
      "monthlyData":[
        {"point": 1, "currentValue": 10, "previousValue": 8},
        {"point": 2, "currentValue": 12, "previousValue": 11},
        {"point": 3, "currentValue": 10, "previousValue": 8},
        {"point": 4, "currentValue": 10, "previousValue": 8},
       ...
        {"point": 31, "currentValue": null, "previousValue": null}
        ],
      "annuallyData":[
        {"point": "Янв", "currentValue": 10, "previousValue": 8},
        {"point": "Фев", "currentValue": 12, "previousValue": 11},
        {"point": "Мар", "currentValue": 10, "previousValue": 8},
        {"point": "Апр", "currentValue": 10, "previousValue": 8},
       ...
        {"point": "Дек", "currentValue": null, "previousValue": null}
        ]
    },
	"report_orders_dynamic_1_with_canceled":{
      "currency": "RUB",
      "week": 7800,
      "previousWeek": 140000,
      "previousWeekDiffDirection": "UP"
      "previousMonth": 820000,
      "previousMonthDiffDirection": "DOWN"
      "weeklyData":[
        {"point": "Пн", "currentValue": 10, "previousValue": 8},
        {"point": "Вт", "currentValue": 12, "previousValue": 11},
        {"point": "Ср", "currentValue": 10, "previousValue": 8},
        {"point": "Чт", "currentValue": 10, "previousValue": 8},
        {"point": "Пт", "currentValue": 10, "previousValue": 8},
        {"point": "Сб", "currentValue": null, "previousValue": null},
        {"point": "Вс", "currentValue": null, "previousValue": null}
        ],
      "monthlyData":[
        {"point": 1, "currentValue": 10, "previousValue": 8},
        {"point": 2, "currentValue": 12, "previousValue": 11},
        {"point": 3, "currentValue": 10, "previousValue": 8},
        {"point": 4, "currentValue": 10, "previousValue": 8},
       ...
        {"point": 31, "currentValue": null, "previousValue": null}
        ],
      "annuallyData":[
        {"point": "Янв", "currentValue": 10, "previousValue": 8},
        {"point": "Фев", "currentValue": 12, "previousValue": 11},
        {"point": "Мар", "currentValue": 10, "previousValue": 8},
        {"point": "Апр", "currentValue": 10, "previousValue": 8},
       ...
        {"point": "Дек", "currentValue": null, "previousValue": null}
        ]
    },
    "report_goods_turnover_1":{
      "week":1500,
      "previousWeek":4300,
      "previousWeekDiffDirection": "UP",
      "previousMonth": 6400,
      "previousMonthDiffDirection": "DOWN",
       "weeklyData":[
        {"point": "Пн", "warehoused": 10, "shipped": 8, "available": 2},
        {"point": "Вт", "warehoused": 10, "shipped": 8, "available": 2},
        {"point": "Ср", "warehoused": 10, "shipped": 8, "available": 2},
        {"point": "Чт", "warehoused": 10, "shipped": 8, "available": 2},
        {"point": "Пт", "warehoused": 10, "shipped": 8, "available": 2},
        {"point": "Сб", "warehoused": null, "shipped": null, "available": null},
        {"point": "Вс", "warehoused": null, "shipped": null, "available": null}
        ],
      "annuallyData":[
        {"point": "Янв", "warehoused": 10, "shipped": 8, "available": 2},
        {"point": "Фев", "warehoused": 10, "shipped": 8, "available": 2},
        {"point": "Мар", "warehoused": 10, "shipped": 8, "available": 2},
        {"point": "Апр", "warehoused": 10, "shipped": 8, "available": 2},
       ...
        {"point": "Авг, "warehoused": null, "shipped": null, "available": null}
        ]
    },
    "report_sales_channels_1":{
      "channelSales":[
        {"channel": "Ozon", "amount": 3487},
        {"channel": "Beru", "amount": 3100},
        {"channel": "Goods", "amount": 2900},
        {"channel": "Aliexpress", "amount": 2850},
        {"channel": "Online", "amount": 4865}
        ]
    },
    "report_sales_avg_order_full_1":{
       "currency": "RUB",
        "week": 1256,
        "month": 2330,
        "allTime": 1700,
        "annuallyData":[
        {"point": "Янв",  "amount": 3487},
        {"point": "Фев",  "amount": 4569},
        {"point": "Мар",  "amount": 1223},
        {"point": "Апр",  "amount": 4755},
       ...
        {"point": "Авг", "warehoused": null, "shipped": null, "available": null}
        ]
    },
    "report_orders_sum_full_1":{
        "week": 12,
        "month": 25,
        "allTime": 36,
        "annuallyData":[
        {"point": "Янв", "amount": 10, "amount_no_cod": 8, "amount_online": 2, "amount_cod": 3},
        {"point": "Фев", "amount": 10, "amount_no_cod": 8, "amount_online": 2, "amount_cod": 3},
        {"point": "Мар", "amount": 10, "amount_no_cod": 8, "amount_online": 2, "amount_cod": 3},
        {"point": "Апр", "amount": 10, "amount_no_cod": 8, "amount_online": 2, "amount_cod": 3},
       ...
        {"point": "Авг", "amount": null, "amount_no_cod": null, "amount_online": null, "amount_cod": null}
        ]
    },
	 "report_top_selling_products_1":{
       "currency": "RUB",        
        "products":[
        {"name": "Ботинки мужские, модель Privet, размер 41",  "productId": 1001, "variantId": 1020, "amount": 56, "totalSum": 6598.65, "avgItemSum": 117.8},   
		{"name": "Ботинки мужские, модель Privet, размер 42",  "productId": 1003, "variantId": 1018 "amount": 48, "totalSum": 5598.65, "avgItemSum": 120.8} 		
        ]
    },
	 "report_last_changed_orders_1":{          
        "orders":[
        {"id": "5966-5698",  "updateTs": "2020-08-01 16:35:45", "status": "ORDER_INFO_SHIPPED", "totalOrderSum": 6598.65},   
		{"id": "5966-5695",  "updateTs": "2020-08-01 16:28:41", "status": "ORDER_INFO_DELIVERED",  "totalOrderSum": 256.65}   		
        ]
    }
}

 

Отчеты сформированы под визуализацию, описанную в задачах:

https://openproject.notasoft.ru/work_packages/1003

https://openproject.notasoft.ru/work_packages/1009

https://openproject.notasoft.ru/work_packages/1010

https://openproject.notasoft.ru/projects/lk2/work_packages/1034/activity

 

Пример макета визуализации по указанным отчетам:

dashboard2.png 

 

 

Обновление данных для графика оборота товаров

/api/lite/report/update_goods

Принудительно обновляет пересчет по обороту из БД. 

 

 

 

 

Личный кабинет покупателей

Апи для работы с личным кабинетом покупателей

Личный кабинет покупателей

/api/customer/account/register

Создание нового аккаунта покупателя

/api/customer/account/register

Для регистрации необходимо выполнить следующий запрос

{
 "email": "test@test.com",
 "phone": "+798585858",
 "firstName": "Ivan",
 "lastName": "Ivanov",
 "middleName": "Ivanocich" 
}

Обязательные поля:  email

Также  необходимо в Header добавить domain, в котором указать нужный домен магазина.

Успех

возвращается сгенерированный пароль и jwt token для доступа

{
"success": true,
"authToken": {
"success": true,
"access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJpdmFuQHRlc3QuY29tIiwiZXhwIjoxNTk5MDU2MDA1fQ.-eEOV2NxHQAmt0habFOB18dr-P_drgS0S4YJmx15RMnTZYcGElwi7oEAgm-8qakr-aroYwyxrdwQ1NS_WVgYqA",
"token_type": "bearer",
"login": "ivan@test.com",
"expires_in": 14400,
"init_state": "completed"
},
"password": "8N9y8Jqb"
}

Ошибка

{
"success": false,
"errors": [
  {
"code": 403,
"message": "Данный покупатель уже существует"
}
],
"authToken": null,
"password": null
}

 

Личный кабинет покупателей

/api/customer/auth

Авторизация

/api/customer/auth

Для авторизации необходимо выполнить следующий запрос

{
"emailLogin": "yura@test.com",
"password": "123456"
}

Также  необходимо в Header добавить domain, в котором указать нужный домен магазина.

В ответ возвращается

Успех

{
  "success": true,
  "access_token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3b3c1NkBtYWlsLnJ1IiwiZXhwIjoxNTQ2OTc2NzQ5fQ.4Zdev5PSIk1TmsPFxjxHukYwH1wa_efn19cfLIkT8k2g9xEeVMOnYK4A4pTC6NCpsp2kq8_dvygRxAyyEKNwiQ",
  "token_type": "bearer",
  "login": "wow56@mail.ru",
  "expires_in": 14400
}

где access_token содержит токен для доступа

expires_in - количество секунд действительности выданного токена.

Ошибка:

{
"success": false,
"errors": [
 {
 "code": 401,
 "message": "Unauthorized"
 }
]
}

 

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

в запросе должен быть header

с ключем Authorization

и значением вида "Bearer {access_token}"

например Bearer

eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJ3b3c1NUBtYWlsLnJ1IiwiZXhwIjoxNTQ2ODA3MjU3fQ.1vSO5DXhewQfjKITK76W8JhEZM_Wx2YgyEbdjfg9GDs0ymtRtmRgFuZen_n8fM00H1Uda_i6M2-Y1PbjN4edZA

 

Личный кабинет покупателей

/api/customer/account/password_reset

Запрос на сброс пароля покупателя

api/customer/account/password_reset

Для запроса сброса необходимо отправить следующий запрос:

{ 
    "email":"test@test.ru"   
}

Также  необходимо в Header добавить domain, в котором указать нужный домен магазина.

В ответ возвращается

Успех:

{
"success": true
}

при этом, по указанному email отправляется письмо со ссылкой вида

http://localhost:33043/customer_password_reset_confirm/?t=6aaccd91-1045-4200-b105-b4db79490fee

Где адрес сервера будет взят из текущего адреса, включая домен 3 уровня.

срок действия токена - 1 час

Данная ссылка будет открыта пользователем в браузере GET запросом. 

js код должен обработать открытие подобной ссылки и вывести пользователю запрос на ввод нового пароля и подтверждение пароля.

По нажатию кнопки подтверждения на данном экране создания нового пароля следует выполнить POST запрос на адрес

/api/customer/password_reset_confirm

с передачей токена из ссылки и нового пароля  (см следующий метод).

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Личный кабинет покупателей

/api/customer/account/password_reset_confirm

Сброс пароля 

/api/customer/account/password_reset_confirm

Для сброса необходимо выполнить запрос с передачей временного токена сброса пароля и нового пароля:

{ 
    "token":"6aaccd91-1045-4200-b105-b4db79490fee",
    "password": "abcd"
}

Также  необходимо в Header добавить domain, в котором указать нужный домен магазина, для этого покупателя.

В ответ возвращается

Успех:

{
"success": true
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}
Личный кабинет покупателей

api/customer/info

Запрос данных покупателя

api/customer/info

Метод возвращает информацию о текущем покупателе.

Параметр Тип / формат Описание

id

string

Идентификатор пользователя

emailLogin

string

Почта пользователя - является логином

firstName

string

Имя

lastName string Фамилия
middleName string Отчество
fullName string Имя в формате ФИО
phone string Отформатированный телефон
rawPhone string Телефон
alternativeRawPhome string Дополнительный телефон
alternativePhone string Дополнительный отформатированный телефон

address

object

Адрес пользователя

consentToNewsletter

boolean

Согласие на email рассылку

Пример результата запроса:

{
  "id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
  "emailLogin": "ivan@test.com",
  "firstName": "Ivan",
  "lastName": "Ivanov",
  "middleName": "Ivanovich",
  "fullName": "Ivanov Ivan Ivanovich",
  "phone": "",
  "rawPhone": "+7985858585",
  "alternativePhone": ""
  "address": {
      "country": "Россия",
      "countryCode": "RU",
      "region": "Московская",
      "area": null,
      "city": "Красногорск",
      "settlement": "Ангелово",
      "street": "мкр МЖК Росинка",
      "house": "74/1",
      "block": "",
      "building": "",
      "flat": "1",
      "fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
      "fullCity": null,
      "rawData": null,
      "zip": "143442",
      "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
      "areaFias": null,
      "cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
      "settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
      },
  "consentToNewsletter": true
}

Ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Покупатель не найден"
 }
]
}

 

Личный кабинет покупателей

(POST) api/customer/info

Редактировать информацию о покупателе

api/customer/info

Производит редактирование профиля текущего покупателя. 

пример запроса:

{
  "rawPhone": "+7985858585",
  "firstName": "Oleg",
  "lastName": "Pushkin",
  "middleName": "Ivanov"
  "password": "123456",
  "rawAlternativePhone": "+85645545454",
   "address": {
      "country": "Россия",
      "countryCode": "RU",
      "region": "Московская",
      "area": null,
      "city": "Красногорск",
      "settlement": "Ангелово",
      "street": "мкр МЖК Росинка",
      "house": "74/1",
      "block": "",
      "building": "",
      "flat": "1",
      "fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
      "fullCity": null,
      "rawData": null,
      "zip": "143442",
      "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
      "areaFias": null,
      "cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
      "settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
      },
  "consentToNewsletter": true
}

В ответ возвращается

Успех:

В случае успеха вернется обновленный покупатель:

{
  "id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
  "emailLogin": "ivan@test.com",
  "rawPhone": "+7985858585",
  "firstName": "Oleg",
  "lastName": "Pushkin",
  "middleName": "Ivanov"
  "rawAlternativePhone": "+85645545454",
  "fullName": "Pushkin Oleg Ivanov",
  "phone": "",
  "alternativePhone": ""
  "address": {
      "country": "Россия",
      "countryCode": "RU",
      "region": "Московская",
      "area": null,
      "city": "Красногорск",
      "settlement": "Ангелово",
      "street": "мкр МЖК Росинка",
      "house": "74/1",
      "block": "",
      "building": "",
      "flat": "1",
      "fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
      "fullCity": null,
      "rawData": null,
      "zip": "143442",
      "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
      "areaFias": null,
      "cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
      "settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
      },
  "consentToNewsletter": true
}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Покупатель не найден"
 }
]
}
Личный кабинет покупателей

api/customer/orders

Запрос списка заказов

api/customer/orders

Метод возвращает список заказов текущего покупателя.

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: api/customer/orders?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=10

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

Пример результата запроса

{
"success": true,
"recordsTotal": 2,
"orders": [
  {
"id": "20412212",
"date": "2020-06-03 09:22:06",
"updateTs": "2020-06-10 16:09:43.226",
"status": "ORDER_INFO_DONE",
"totalOrderSum": 1208,
"insuranceSum": 1059,
"insuranceSumAutoCalculation": true,
"paymentStatus": "PAID",
"confirmStatus": "APPROVED",
"paymentMethodCode": "online",
"paymentMethodType": "ONLINE",
"needCustomerPayment": true,
"shortUrl": "http://r.kak2c.ru/o6meazi",
"delivery": {
"code": "b26909d5-8424-7de9-42ca-53f668f70a8a",
"type": "COURIER",
"title": "BERU",
"pickupPointId": null,
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_beru_middle.svg",
"trackingNumber": "20412212",
"trackingURL": null,
"desiredDeliveryDate": null,
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"actualDeliveryDate": null,
"pvzComment": null,
"deliveryComment": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
},
"receiver": {
"name": "Покупатель на Беру",
"surname": null,
"patronymic": null,
"phone": "+70000000000",
"rawPhone": "+70000000000",
"alternativePhone": "",
"email": null,
"post": null,
"personType": "CUSTOMER",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
},
"deliveryServices": null
},
"items": [
  {
"num": 1,
"variantId": "83491",
"variantExtId": "NL290-83491",
"productId": "1052",
"productExtId": "83490",
"name": "CC крем «Абсолютное совершенство» SPF 20, 30 мл, Оттенок: Light ",
"article": "NL290-83491",
"quantity": 1,
"vatRate": "VAT_20",
"price": 1059,
"skuType": "SKU",
"itemDimensions": {
"height": 0,
"width": 0,
"depth": 0
},
"itemWeight": 0,
"barcode": "6412600834918"
},
  {
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"article": "",
"quantity": 1,
"vatRate": "VAT_20",
"price": 149,
"skuType": "SERVICE",
"barcode": ""
}
],
"customerPaymentInProcess": false,
"customer": {
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "yura@test.com",
"firstName": "Yura",
"lastName": "Dan",
"middleName": "Dan",
"fullName": "Dan Yura Dan",
"phone": "",
"rawPhone": "+7985858585",
"alternativePhone": "",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
}
},
"c": "f132f0d9-ced0-1134-573c-5dba550e3792"
},
  {
"id": "19918626",
"date": "2020-05-25 21:19:24",
"updateTs": "2020-06-05 17:38:27.352",
"status": "ORDER_INFO_DONE",
"totalOrderSum": 579,
"insuranceSum": 579,
"insuranceSumAutoCalculation": true,
"paymentStatus": "NOT_PAID",
"confirmStatus": "APPROVED",
"paymentMethodCode": "cod-cash",
"paymentMethodType": "COD_CASH",
"needCustomerPayment": false,
"shortUrl": "http://r.kak2c.ru/jc2dyb2",
"delivery": {
"code": "b26909d5-8424-7de9-42ca-53f668f70a8a",
"type": "COURIER",
"title": "BERU",
"pickupPointId": null,
"logoUrl": "https://storage.yandexcloud.net/lk-kak2c/delivery_beru_middle.svg",
"trackingNumber": "19918626",
"trackingURL": null,
"desiredDeliveryDate": null,
"desiredDeliveryTimeFrom": "09:00",
"desiredDeliveryTimeTo": "18:00",
"actualDeliveryDate": null,
"pvzComment": null,
"deliveryComment": null,
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
},
"receiver": {
"name": "Покупатель на Беру",
"surname": null,
"patronymic": null,
"phone": "+70000000000",
"rawPhone": "+70000000000",
"alternativePhone": "",
"email": null,
"post": null,
"personType": "CUSTOMER",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Москва",
"area": null,
"city": "Москва",
"settlement": null,
"street": null,
"house": null,
"block": null,
"building": null,
"flat": null,
"fullAddress": "Москва",
"fullCity": null,
"rawData": null,
"zip": null,
"regionFias": null,
"areaFias": null,
"cityFias": null,
"settlementFias": null
}
},
"deliveryServices": null
},
"items": [
  {
"num": 1,
"variantId": "84981",
"variantExtId": "NL110-84981",
"productId": "1019",
"productExtId": "NL110-84981",
"name": "Тушь с черникой для чувствительных глаз, 9 мл, Оттенок: Черный ",
"article": "NL110-84981",
"quantity": 1,
"vatRate": "NO_VAT",
"price": 579,
"img": "https://storage.yandexcloud.net/images-k2c/eef378d6-853f-4c75-a3b4-b2bdec352fe7.jpg",
"skuType": "SKU",
"itemDimensions": {
"height": 0,
"width": 0,
"depth": 0
},
"itemWeight": 0,
"barcode": "6412600849813"
},
  {
"num": 2,
"variantId": "delivery",
"name": "Доставка",
"article": "",
"quantity": 1,
"vatRate": "NO_VAT",
"price": 0,
"skuType": "SERVICE",
"barcode": ""
}
],
"customerPaymentInProcess": false,
"customer": {
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "yura@test.com",
"firstName": "Yura",
"lastName": "Dan",
"middleName": "Dan",
"fullName": "Dan Yura Dan",
"phone": "",
"rawPhone": "+7985858585",
"alternativePhone": "",
"address": {
"country": "Россия",
"countryCode": "RU",
"region": "Московская",
"area": null,
"city": "Красногорск",
"settlement": "Ангелово",
"street": "мкр МЖК Росинка",
"house": "74/1",
"block": "",
"building": "",
"flat": "1",
"fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
"fullCity": null,
"rawData": null,
"zip": "143442",
"regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
"areaFias": null,
"cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
"settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
}
},
"c": "326a2701-e668-c8b2-dda6-ab259921aaee"
}
],
}

Ошибка:

{
  "success": false,
  "errors": [{"code": 0,"message": "Текст ошибки"}]
}
Личный кабинет покупателей

api/customer/orders/cancelled

Отменить заказ покупателя

api/customer/orders/cancelled

Производит отмену заказа. 

пример тела запроса:

{ 
"orderId":"1029" 
}

В ответ возвращается

успех:

{
"success": true

}

ошибка: 

{
"success": false,
"errors": [
 {
 "code": 0,
 "message": "Текст ошибки"
 }
]
}

Покупатели

Апи для менеджеров магазина, позволяет создавать и редактировать покупателей

Покупатели

/api/lite/customers/

Запрос списка покупателей

api/lite/customers/

Метод возвращает список покупателей текущего аккаунта

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: api/lite/customers?page=0&size=10

Если параметры не переданы, то дефолтные значения page=0&size=10

Фильтрация

Для фильтрации компонентов страницы, можно использовать параметр text и указать в нем имя либо email пользователя
Пример: api/lite/customers?page=0&size=10&text=Ivan

Также, для отображение пейджинации следует анализировать параметр totalElements и totalPages, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть) и страниц.

Пример результата запроса:

{
"content": [
  {
    "id": "e63d94d8-258f-489a-00fe-b8b6025ce677",
    "emailLogin": "ivan@test.com",
    "firstName": "Ivan",
    "lastName": null,
    "middleName": null,
    "fullName": "Ivan",
    "phone": "",
    "rawPhone": "+79995556677",
    "alternativePhone": "",
    "consentToNewsletter": true
    },
  {
    "id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
    "emailLogin": "yura@test.com",
    "firstName": "Yura",
    "lastName": "Dan",
    "middleName": "Dan",
    "fullName": "Dan Yura Dan",
    "phone": "",
    "rawPhone": "+7985858585",
    "alternativePhone": "",
    "address": {
        "country": "Россия",
        "countryCode": "RU",
        "region": "Московская",
        "area": null,
        "city": "Красногорск",
        "settlement": "Ангелово",
        "street": "мкр МЖК Росинка",
        "house": "74/1",
        "block": "",
        "building": "",
        "flat": "1",
        "fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
        "fullCity": null,
        "rawData": null,
        "zip": "143442",
        "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
        "areaFias": null,
        "cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
        "settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
    },
    "consentToNewsletter": false
    }
],
"pageable": {
    "sort": {
    "sorted": false,
    "unsorted": true,
    "empty": true
    },
  "offset": 0,
  "pageNumber": 0,
  "pageSize": 10,
  "paged": true,
  "unpaged": false
},
  "last": true,
  "totalElements": 2,
  "totalPages": 1,
  "size": 10,
  "number": 0,
  "sort": {
  "sorted": false,
  "unsorted": true,
  "empty": true
},
"first": true,
"numberOfElements": 2,
"empty": false
}

 

 

Покупатели

/api/lite/customers/{email}

Запрос данных покупателя

/api/lite/customers/{email}

Метод возвращает информацию о текущем данном покупателе.

Пример: /api/lite/customers/test@test.com

Метод возвращает информацию о текущем покупателе.

Параметр Тип / формат Описание

id

string

Идентификатор пользователя

emailLogin

string

Почта пользователя - является логином

firstName

string

Имя

lastName string Фамилия
middleName string Отчество
fullName string Имя в формате ФИО
phone string Отформатированный телефон
rawPhone string Телефон
alternativeRawPhome string Дополнительный телефон
alternativePhone string Дополнительный отформатированный телефон

address

object

Адрес пользователя

Пример результата запроса:

{
"id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
"emailLogin": "ivan@test.com",
"firstName": "Ivan",
"lastName": "Ivanov",
"middleName": "Ivanovich",
"fullName": "Ivanov Ivan Ivanovich",
"phone": "",
"rawPhone": "+7985858585",
"alternativePhone": ""
"address": {
    "country": "Россия",
    "countryCode": "RU",
    "region": "Московская",
    "area": null,
    "city": "Красногорск",
    "settlement": "Ангелово",
    "street": "мкр МЖК Росинка",
    "house": "74/1",
    "block": "",
    "building": "",
    "flat": "1",
    "fullAddress": "Московская обл, г Красногорск, село Ангелово, мкр МЖК Росинка, д 74/1, кв. 1",
    "fullCity": null,
    "rawData": null,
    "zip": "143442",
    "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
    "areaFias": null,
    "cityFias": "63fcf18a-365e-451f-baee-8d09ac50b773",
    "settlementFias": "2b627d06-2257-4c20-83b1-5efa10ef57b4"
	}
}

Ошибка: 

{
"success": false,
"errors": [
   {
   "code": 0,
   "message": "Не найден покупатель с указанным email test@test.com"
   }
]
}
Покупатели

POST /api/lite/customers/

Редактировать информацию о покупателе

/api/lite/customers/

Производит редактирование выбранного покупателя или добавление нового, если покупатель не найден. 

Пример запроса:

{
  "emailLogin": "test@test.com",
  "firstName": "Oleg",
  "lastName": "Pushkin",
  "middleName": "Ivanov"
  "rawPhone": "+792556123456",
  "rawAlternativePhone": "+85645545454"
}

Успех:

В случае успеха вернется обновленный покупатель:

{
  "id": "9a5e8591-7ea7-adb6-34db-546f105fc11a",
  "emailLogin": "ivan@test.com",
  "rawPhone": "+7985858585",
  "firstName": "Oleg",
  "lastName": "Pushkin",
  "middleName": "Ivanov"
  "rawAlternativePhone": "+85645545454",
  "fullName": "Pushkin Oleg Ivanov",
  "phone": "",
  "alternativePhone": ""
}

 

Покупатели

DELETE /api/lite/customers/

Удаление покупателя

/api/lite/customers/

Параметры:

Метод удаляет выбранного покупателя

Пример: /api/lite/customers?email=test@test.com

Успех:

Вернет id удаленного покупателя

{
  "success": true,
  "id":"9a5e8591-7ea7-adb6-34db-546f105fc11a"
}

Ошибка: 

{
"success": false,
"errors": [
   {
   "code": 0,
   "message": "Не найден покупатель с указанным email test@test.com"
   }
]
}
Покупатели

customers.enable=true

Данный параметр приложения отвечает за включение или отключение автоматического добавление(создание нового покупателя) при заказе.

Фиды для Я.Маркета

Фиды для Я.Маркета

/api/lite/feed/settings

Список фидов(подробная информация по фиду) (/api/lite/feed/settings)

/api/lite/feed/settings

 

Положительный результат запроса: 

{
    "success": true,
    "recordsTotal": 1,
    "settings": [
        {
            "success": true,
            "id": "83dcafbd-ba01-9742-88c0-03746cbfca48",
            "name": "Фид для маркета",
            "cloudUrl": "https://storage.yandexcloud.net/images-k2c/0de5d740-b2d4-4425-9490-7f5153daa698.xml",
            "cloudId": "0de5d740-b2d4-4425-9490-7f5153daa698",
            "active": false,
            "lastUpdate": null,
            "collections": [
                "1001"
            ],
            "shopName": "Магазин 01",
          	"shopUrl": "https://lumene.ru/", //Адрес магазина, влияет на тег <url>https://lumene.ru/</url>
    		"shopOfferUrl": "https://lumene.ru/catalog/{UTM}#/item/{ID}", //Шаблон адреса товара.
            "companyName": "ООО ААА",
            "deliveryEnabled": true,
            "selfPickupEnabled": true,
            "nonPreorderEnabled": false,
            "deliveryMethods": [
                {
                    "deliveryPrice": 150,
                    "minDays": 1,
                    "maxDays": 3,
                    "placeOrderHour": 18
                }
            ],
            "pickupMethods": [
                {
                    "deliveryPrice": 0,
                    "minDays": 1,
                    "maxDays": 1,
                    "placeOrderHour": 0
                }
            ],
            "adult": false,
            "offerNameFormat": "NAME",
            "utm": "utm_token=12332&utm_source=ya.ru",
            "salesNote": "Все товары сертифицированы",
            "useOfferGroups": true,
            "attrMatching": {
                "manufacturer_warranty": "warranty"
            },
            "priceCode": null,
            "oldPriceCode": "Цена до скидки"
        }
    ]
}

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/feed/settings?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

 

параметр: id (Идентификатор фида, если передан, возвращается подробная информация по фиду)

например /api/lite/feed/settings?id=83dcafbd-ba01-9742-88c0-03746cbfca48

Положительный результат запроса: 

{
    "success": true,
    "id": "83dcafbd-ba01-9742-88c0-03746cbfca48",
    "name": "Фид для маркета",
    "cloudUrl": null,
    "cloudId": null,
    "active": false,
    "lastUpdate": null,
    "collections": [
        "1001"
    ],
    "shopName": "Магазин 01",
  	"shopUrl": "https://shop.ru/", 
    "shopOfferUrl": "https://shop.ru/catalog/{UTM}#/item/{ID}",
    "companyName": "ООО ААА",
    "deliveryEnabled": true,
    "selfPickupEnabled": true,
    "nonPreorderEnabled": false,
    "deliveryMethods": [
        {
            "deliveryPrice": 150,
            "minDays": 1,
            "maxDays": 3,
            "placeOrderHour": 18
        }
    ],
    "pickupMethods": [
        {
            "deliveryPrice": 0,
            "minDays": 1,
            "maxDays": 1,
            "placeOrderHour": 0
        }
    ],
    "adult": false,
    "offerNameFormat": "NAME",
    "utm": "utm_token=12332&utm_source=ya.ru",
    "salesNote": "Все товары сертифицированы",
    "useOfferGroups": true,
    "attrMatching": {
        "manufacturer_warranty": "warranty"
    },
    "priceCode": null,
    "oldPriceCode": "Цена до скидки",
  	"checkStock": false, //Проставлять отсутствующим товарам флаг "под заказ"
  	"excludeZeroStock":false, //Исключать из фида товар с нулевыми остатками
    "warehouseCode": null //ИД склада
}

 

 

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

Обновить настройки фида  (/api/lite/feed/settings)

/api/lite/feed/settings

Пример запроса: 

{
   "id": "83dcafbd-ba01-9742-88c0-03746cbfca48", //если не задан, то создаётся новый фид
    "name": "Фид для маркета",
    "active": false,
    "collections": [
        "1001"
    ],
    "shopName": "Магазин 01",
  	"shopUrl": "https://shop.ru/", //Адрес магазина, влияет на тег <url>https://shop.ru/</url>
    "shopOfferUrl": "https://shop.ru/catalog/{UTM}#/item/{ID}", //Шаблон адреса товара.
    "companyName": "ООО ААА",
    "deliveryEnabled": true,
    "selfPickupEnabled": true,
    "nonPreorderEnabled": true,
    "deliveryMethods": [{"deliveryPrice":150, "minDays":1, "maxDays":3, "placeOrderHour":18}],
    "pickupMethods": [{"deliveryPrice":0, "minDays":1, "maxDays":1, "placeOrderHour":0}],
    "adult": false,
    "offerNameFormat": "NAME", //NAME_COLLECTION_PARENTHESES | NAME_COLLECTION_COLON
    "utm": "utm_token=12332&utm_source=ya.ru",
    "salesNote": "Все товары сертифицированы",
    "useOfferGroups": true,
    "attrMatching": {"manufacturer_warranty":"warranty", "sales_notes": "notes"}, //"код в маркете" : "код в кактусе"
    "priceCode": "Розничная цена",
    "oldPriceCode": "Цена до скидки"
  	"updateInterval": 10, //Интервал автообновления фида, минуты. Минимально - 10 мин. По умолчанию: 24 * 60 = 1440 минут
    "checkStock": false, //Проверять наличие товара на складе, влияет на параметр available в теге <offer>. false по умолчанию
  	"excludeZeroStock":false, //Исключать из фида товар с нулевыми остатками. false по умолчанию
    "warehouseCode": null //ид склада остатков (guid). если не указан, остатки проверяются на всех складах. null по умолчанию
}

Положительный результат запроса: 

Пример
{
    "success": true,	
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

Удаление фида

/api/lite/feed/settings&id=

параметр: id (Идентификатор фида)

например /api/lite/feed/settings?id=83dcafbd-ba01-9742-88c0-03746cbfca48

Успех:

{
  "success": true,
}

Ошибка: 

{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Фиды для Я.Маркета

/api/lite/feed/settings/download_yml

Сгенерировать и скачать yml файл (/api/lite/feed/settings/download_yml)

/api/lite/feed/settings/download_yml?id=

параметр: id (идентификатор фида)

например /api/lite/feed/settings/download_yml?id=83dcafbd-ba01-9742-88c0-03746cbfca48

Успех:

application/octet-stream

Ошибка: 

status 500

{
"timestamp": "2020-04-03T10:38:46.343+0000",
"status": 500,
"error": "Internal Server Error",
"message": "12345",
"path": "/api/lite/feed/settings/download_yml"
}
Фиды для Я.Маркета

/api/lite/feed/market_attributes

Список возможных атрибутов Я.Маркета(/api/lite/feed/market_attributes)

Возвращает все возможные атрибуты из маркета.

Служит ключом в маппинге "attrMatching" 

* Для получения всех атрибутов продукта в кактусе есть метод: /api/lite/products/attributes

(код атрибута продукта служит значением в маппинге "attrMatching")

/api/lite/feed/market_attributes

 

Положительный результат запроса: 

{
    "success": true,
    "marketAttributes": [
        {
            "id": "available",
            "name": "Статус товара (в наличие/на заказ)"
        },
        {
            "id": "bid",
            "name": "Ставка"
        },
        {
            "id": "url",
            "name": "URL страницы товара "
        },
        {
            "id": "oldPrice",
            "name": "Старая цена товара"
        },
        {
            "id": "vendor",
            "name": "Производитель"
        },
        {
            "id": "vendorCode",
            "name": "Код производителя"
        },
        {
            "id": "model",
            "name": "Модель"
        },
        {
            "id": "sales_notes",
            "name": "Комментарий к товару"
        },
        {
            "id": "description",
            "name": "Описание товарного предложения"
        },
        {
            "id": "name",
            "name": "Название товарного предложения"
        },
        {
            "id": "delivery",
            "name": "Возможность курьерской доставки"
        },
        {
            "id": "pickup",
            "name": "Возможность самовывоза"
        },
        {
            "id": "store",
            "name": "Возможность купить товар без предварительного заказf"
        },
        {
            "id": "manufacturer_warranty",
            "name": "Официальная гарантия производителя (да/нет)"
        },
        {
            "id": "country_of_origin",
            "name": "Страна производства товара"
        },
        {
            "id": "adult",
            "name": "Товары adult-тематики"
        },
        {
            "id": "age",
            "name": "Возрастная категория товара (годы)"
        },
        {
            "id": "downloadable",
            "name": "Продукт можно скачать"
        }
    ]
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}
Фиды для Я.Маркета

/api/lite/feed/refresh

Обновить содержимое фида(в облаке)  (/api/lite/feed/refresh)

/api/lite/feed/refresh?id=

Обновляет файл в облаке. 

параметр: id (Идентификатор фида) обязательный

Положительный результат запроса: 

Пример
{
    "success": true,
    "id": "83dcafbd-ba01-9742-88c0-03746cbfca48",
    "name": "Фид для маркета",
    "cloudUrl": "https://storage.yandexcloud.net/images-k2c/0de5d740-b2d4-4425-9490-7f5153daa698.xml",
    "cloudId": "0de5d740-b2d4-4425-9490-7f5153daa698.xml",
    "active": false,
    "lastUpdate": "2020-10-20 19:52:09",
    "collections": [
        "1001"
    ],
    "shopName": "Магазин 01",
    "companyName": "ООО ААА",
    "deliveryEnabled": true,
    "selfPickupEnabled": true,
    "nonPreorderEnabled": false,
    "deliveryMethods": [
        {
            "deliveryPrice": 150,
            "minDays": 1,
            "maxDays": 3,
            "placeOrderHour": 18
        }
    ],
    "pickupMethods": [
        {
            "deliveryPrice": 0,
            "minDays": 1,
            "maxDays": 1,
            "placeOrderHour": 0
        }
    ],
    "adult": false,
    "offerNameFormat": "NAME",
    "utm": "utm_token=12332&utm_source=ya.ru",
    "salesNote": "Все товары сертифицированы",
    "useOfferGroups": true,
    "attrMatching": {
        "manufacturer_warranty": "warranty"
    },
    "priceCode": null,
    "oldPriceCode": "Цена до скидки"
}

Отрицательный результат запроса:

Пример ошибки
{
  "success": false,
  "errors": [
    {
      "code": 0,
      "message": "текст ошибки"
    }
  ]
}

FBO WB/OZON API

FBO WB/OZON API

/api/lite/orders/worksheet/form_template

Запрос шаблона анкеты FBM

/api/lite/orders/worksheet/form_template?order_id=123437

параметр order_id - ИД заказа в Кактусе, обязательный

Поле Тип Описание
id string ИД поля анкеты в Кактусе.
extId string Внешний ИД поля анкеты. Используется для сопоставления при передаче во внешние системы
name  string Вопрос, который отображается над полем
tooltip  string

Подсказка к полю (всплывайка при наведении на символ (?))

Если null, или отсутствует, то символ подсказки не отображается

value string

Значение поля по умолчанию

mandatory boolean

Обязательность заполнения поля. При дальнейшей валидации, проверяется заполненность value

inputType string

Тип поля ввода. Влияет на отрисовку на форме.

Значения: INPUT, TEXTAREA

Пример результата запроса

{
    "success": true,
    "requirements": {
        "form": true,
        "packing_sticker_type": "NONE",
      	"pallet_sticker_type":"PDF"
    },
    "form_content": [
        {
            "id": "1000",
            "name": "Наименование юрлица",
            "value": "",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1001",
            "name": "Номер поставки МП",
            "value": "",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1002",
            "name": "Дата доставки на склад МП",
            "value": "",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1003",
            "name": "Тип отгрузки: короба, моно, микс",
            "value": "",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1004",
            "name": "Дополнительная упаковка: да/нет",
            "value": "",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1005",
            "name": "Нанесение дополнительного стикера с описанием товара",
            "value": "",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1006",
            "name": "Минимальное количество товара в коробе",
            "value": "",
            "mandatory": true,
            "inputType": "INPUT"
        }
    ]
}
FBO WB/OZON API

/api/lite/orders/worksheet

Запрос анкеты FBM по заказу

/api/lite/orders/worksheet?orderId=TS100307

параметр orderId - ИД заказа в Кактусе, обязательный.

Поле

Тип Описание
id string ИД поля анкеты в Кактусе.
extId string Внешний ИД поля анкеты. Используется для сопоставления при передаче во внешние системы
name  string Вопрос, который отображается над полем
tooltip  string

Подсказка к полю (всплывайка при наведении на символ (?))

Если null, или отсутствует, то символ подсказки не отображается

value string

Значение поля по умолчанию

mandatory boolean

Обязательность заполнения поля. При дальнейшей валидации, проверяется заполненность value

inputType string

Тип поля ввода. Влияет на отрисовку на форме.

Значения: INPUT, TEXTAREA

Пример результата запроса

Если анкета заполнялась:

{
    "success": true,
    "orderId": "1000",
    "form_content": [
        {
            "id": "1000",
            "extId":"WB000001"
            "name": "Порядковый номер палеты",
            "tooltip": "Подсказка к полю (всплывайка при наведении на символ (?))"
            "value": "23445",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1001",
            "name": "Количество палет в поставке",
            "value": "5",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1002",
            "name": "Количество коробов на данной палете",
            "value": "2",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1003",
            "name": "Номер поставки",
            "value": "4433221",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1004",
            "name": "Склад назначения (а при транзите также транзитный склад)",
            "value": "ООО Вектор, ул. Складская, стр.1",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1005",
            "name": "Тип коробов (моно, микс)",
            "value": "моно",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1006",
            "name": "Наименование юридического лица",
            "value": "ООО Вектор",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1007",
            "name": "Дата поставки",
            "value": "20.07.2021",
            "mandatory": true,
            "inputType": "INPUT"
        }
    ]
}

Либо, если анкета не заполнялась:

{
    "success": true,
    "orderId": "1000",
    "form_content": null
}

Создание/редактирование анкеты FBM по заказу

/api/lite/orders/worksheet

orderId - ИД заказа в Кактусе, следует обязательно указывать.

Пример запроса

{
    "success": true,
    "orderId": "1000",
    "form_content": [
        {
            "id": "1000",
            "extId":"WB000001"
            "name": "Порядковый номер палеты",
            "tooltip": "Подсказка к полю (всплывайка при наведении на символ (?))"
            "value": "23445",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1001",
            "name": "Количество палет в поставке",
            "value": "5",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1002",
            "name": "Количество коробов на данной палете",
            "value": "2",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1003",
            "name": "Номер поставки",
            "value": "4433221",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1004",
            "name": "Склад назначения (а при транзите также транзитный склад)",
            "value": "ООО Вектор, ул. Складская, стр.1",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1005",
            "name": "Тип коробов (моно, микс)",
            "value": "моно",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1006",
            "name": "Наименование юридического лица",
            "value": "ООО Вектор",
            "mandatory": true,
            "inputType": "INPUT"
        },
        {
            "id": "1007",
            "name": "Дата поставки",
            "value": "20.07.2021",
            "mandatory": true,
            "inputType": "INPUT"
        }
    ]
}

Ошибка:

{
  "success": false,
  "errors": [
    {
    "code": 0,
    "message": "Текст ошибки"
    }
  ]
}

 

Массовое получение данных анкет по списку заказов

/api/lite/orders/worksheet/batch/get

Параметр orders - список номеров заказов.

Ограничение - не более 500 номеров в запросе

Пример запроса

{
  "orders": [
    "444555",
    "555666"
  ]
}

Пример результата запроса

{
  "orders": [
    {
      "form_content": [],
      "orderId": "444555",
      "success": true
    },
    {
      "form_content": [
        {
          "id": "1000",
          "inputType": "INPUT",
          "mandatory": true,
          "name": "Поставщик",
          "value": "ООО 123"
        },
        {
          "id": "1001",
          "inputType": "INPUT",
          "mandatory": true,
          "name": "Номер поставки МП",
          "value": "77777"
        },
        {
          "id": "shipment_warehouse_destination",
          "inputType": "INPUT",
          "mandatory": true,
          "name": "Склад назначения",
          "value": "Склад Москва"
        },
        {
          "id": "shipment_date",
          "inputType": "INPUT",
          "mandatory": true,
          "name": "Дата и время поставки",
          "value": "01.12"
        }
      ],
      "orderId": "555666",
      "success": true
    }
  ],
  "success": true
}

 

Ошибка:

{
  "success": false,
  "errors": [
    {
    "code": 0,
    "message": "Текст ошибки"
    }
  ]
}

 

FBO WB/OZON API

/api/lite/orders/packing/fbm/sticker/file

/api/lite/orders/packing/fbm/sticker/file

Добавляет PDF файл стикера к упакованному месту.

Параметры передаются как form-data:

upfile Файл(ы) для загрузки
id Идентификатор заказа (humanId)
barcode

ШК упакованного места ("packings":[{"barcode":"201000000315",) 

(Если параметр не передан, то поиск ШК происходит по значению имени файла)

print_when_packing Печатать при упаковке
copies_qty Кол-во копий

Если в значении upfile передан всего 1 файл и значение barcode передано, то загрузка происходит в режиме одиночного файла. Поиск осуществляется по ШК из значения barcode.

Если же в значении upfile 2 или более файлов или значение barcode отсутствует(null или пустое) то загрузка происходит в режиме массового прикрепления. Поиск осуществляется по ШК из названия файлов. (пример: файл BC2003.pdf, поиск будет происходить по значению "BC2003")

Пример ответа (одиночный файл):

{
    "success": true,
    "id": "39a3dde4-f1ab-fc40-8ac2-fd658e2ab596",
    "fileType": "JPG",
    "fileSource": "USER",
    "fileName": "Битва_экстрасенсов_(логотип)",
    "fileExt": "jpg",
    "fileSize": 195261,
    "url": "https://storage.yandexcloud.net/order-files-kak2c/cf2d5a4a-77c0-453d-94f6-30df07bfc261.jpg",
    "printWhenPacking": false,
    "copiesQty": 1,
    "md5sum": "DAC4EB25F5605B754A70093312AC8B65"
}

Пример ответа (массовое прикрепление):

{
    "docFiles": [
        {
            "copiesQty": 1,
            "fileExt": "png",
            "fileName": "1489000096876",
            "fileSize": 57906,
            "fileSource": "USER",
            "fileType": "PNG",
            "id": "7702bb9c-f849-8623-72f3-da02b919d78e",
            "md5sum": "413A2416808C1F4C6FFE47B3E03BEA75",
            "printWhenPacking": false,
            "success": true,
            "url": "https://storage.yandexcloud.net/order-files-kak2c/097bcfb8-e657-4592-b692-b33a858dec1a.png"
        },
        {
            "copiesQty": 1,
            "fileExt": "jpg",
            "fileName": "11111111111111",
            "fileSize": 38543,
            "fileSource": "USER",
            "fileType": "JPG",
            "id": "70a4cf8e-0f15-6c0b-4585-bfb0be1354ff",
            "md5sum": "3431AC1E1A19E37E33461F6B9BF3FEC5",
            "printWhenPacking": false,
            "success": true,
            "url": "https://storage.yandexcloud.net/order-files-kak2c/2087ac74-6b97-4264-a889-3905293da836.jpg"
        }
    ],
    "success": true
}

 

/api/lite/orders/packing/fbm/sticker/file

Удаляет файл

В параметре id передается идентификатор файла.

Пример запроса:

DELETE https://app.kak2c.ru/api/lite/packing/fbm/sticker/file?id=b233372d-cf7b-f07b-446b-128912be7c8a

Пример ответа:

{
  "success": true
}

данные по стикерам упакованных мест возвращаются в методе
/api/lite/orders?id=1001&full_info=true

...
"packings": [
	{
		"barcode": "4343001973680",
		"fbmStickerBarcode": "WB_0032345",
		"measurements": {
			"success": true,
			"weight": 345,
			"dimensions": {
				"height": 100,
				"width": 180,
				"depth": 100
			}
		},
		"items": [
			...
		],
		"files": [
			{
				"success": true,
				"id": "da7b5b5c-34f8-1b87-0937-410c251e3b8e",
				"fileType": "JPG",
				"fileSource": "USER",
				"fileName": "1_T-qHsJ6L5UjpJP-6JVZz0w (1)",
				"fileExt": "jpeg",
				"fileSize": 110724,
				"url": "https://storage.yandexcloud.net/order-files-kak2c/d5e2c0ea-f968-44d1-9d70-d270ab38a773.jpeg",
				"printWhenPacking": false,
				"copiesQty": 1,
				"md5sum": "D61372833808D44DE5F47BE77BDB4CB5"
			}
		]
	}
],
...
FBO WB/OZON API

/api/lite/orders/packing/fbm/sticker

/api/lite/orders/packing/fbm/sticker

Добавляет текстовый стикер к упакованному месту

Пример запроса

{
    "packing_barcode": "4343001973680", //шк упакованноко места
    "sticker_barcode": "WB_003234" //шк текстового стикера маркетплейса
}

Ответ

{
    "success": true
}
FBO WB/OZON API

/api/lite/orders/upload_fbm_docs_ff

/api/lite/orders/upload_fbm_docs_ff

Отправляет данные прикрепленных FBM стикеров упакованных мест и файлов заказа в темпо

Пример запроса

{
    "id": "2502-123437"
}

Ответ

{
    "success": true
}
FBO WB/OZON API

/api/lite/orders/pallet/fbm/sticker/file

/api/lite/orders/pallet/fbm/sticker/file

Добавляет PDF файл стикера к паллете.

Параметры передаются как form-data:

upfile Файл для загрузки
barcode

ШК паллеты ("pallets":[{"barcode":"201000000315",)

(Если параметр не передан, то поиск ШК происходит по значению имени файла)

print_when_packing Печатать при упаковке
copies_qty Кол-во копий

Если в значении upfile передан всего 1 файл и значение barcode передано, то загрузка происходит в режиме одиночного файла. Поиск осуществляется по ШК из значения barcode.

Если же в значении upfile 2 или более файлов или значение barcode отсутствует(null или пустое) то загрузка происходит в режиме массового прикрепления. Поиск осуществляется по ШК из названия файлов. (пример: файл BC2003.pdf, поиск будет происходить по значению "BC2003")

Пример ответа(одиночный файл):

{
    "success": true,
    "id": "39a3dde4-f1ab-fc40-8ac2-fd658e2ab596",
    "fileType": "JPG",
    "fileSource": "USER",
    "fileName": "Битва_экстрасенсов_(логотип)",
    "fileExt": "jpg",
    "fileSize": 195261,
    "url": "https://storage.yandexcloud.net/order-files-kak2c/cf2d5a4a-77c0-453d-94f6-30df07bfc261.jpg",
    "printWhenPacking": false,
    "copiesQty": 1,
    "md5sum": "DAC4EB25F5605B754A70093312AC8B65"
}

Пример ответа (массовое прикрепление):

{
    "docFiles": [
        {
            "copiesQty": 1,
            "fileExt": "png",
            "fileName": "1489000096876",
            "fileSize": 57906,
            "fileSource": "USER",
            "fileType": "PNG",
            "id": "7702bb9c-f849-8623-72f3-da02b919d78e",
            "md5sum": "413A2416808C1F4C6FFE47B3E03BEA75",
            "printWhenPacking": false,
            "success": true,
            "url": "https://storage.yandexcloud.net/order-files-kak2c/097bcfb8-e657-4592-b692-b33a858dec1a.png"
        },
        {
            "copiesQty": 1,
            "fileExt": "jpg",
            "fileName": "11111111111111",
            "fileSize": 38543,
            "fileSource": "USER",
            "fileType": "JPG",
            "id": "70a4cf8e-0f15-6c0b-4585-bfb0be1354ff",
            "md5sum": "3431AC1E1A19E37E33461F6B9BF3FEC5",
            "printWhenPacking": false,
            "success": true,
            "url": "https://storage.yandexcloud.net/order-files-kak2c/2087ac74-6b97-4264-a889-3905293da836.jpg"
        }
    ],
    "success": true
}

 

/api/lite/orders/pallet/fbm/sticker/file

Удаляет файл

В параметре id передается идентификатор файла.

Пример запроса:

DELETE https://app.kak2c.ru/api/lite/pallet/fbm/sticker/file?id=b233372d-cf7b-f07b-446b-128912be7c8a

Пример ответа:

{
  "success": true
}

данные по стикерам паллет возвращаются в методе
/api/lite/orders?id=1001&full_info=true

...
"pallets": [
	{
		"barcode": "pl705970976005-1",
		"files": [
			{
				"copiesQty": 1,
				"fileExt": "pdf",
				"fileName": "ИП Ozon Хоругвино Шк на палету",
				"fileSize": 22535,
				"fileSource": "USER",
				"fileType": "PDF",
				"id": "aa22d7fa-65a2-6be0-8e0d-430ec6c874d3",
				"printWhenPacking": false,
				"success": true,
				"url": "https://storage.yandexcloud.net/order-files-kak2c/b42eebd1-eb7e-4603-a781-5240699288d9.pdf" //ШК в формате PDF
			}
		], 
		"measurements": {
			"dimensions": {
				"depth": 120,
				"height": 100,
				"width": 120
			},
			"success": true,
			"weight": 200
		},
		"num": 1,
		"packings": [
			{
				"barcode": "201000000469",
				"measurements": {
					"dimensions": {
						"depth": 400,
						"height": 200,
						"width": 300
					},
					"success": true,
					"weight": 700
				},
				"palletBarcode": "pl705970976005-1"
			}
		]
	}
],
...
FBO WB/OZON API

/api/lite/orders/pallet/fbm/sticker

/api/lite/orders/pallet/fbm/sticker

Добавляет текстовый стикер к паллете

Пример запроса

{
    "pallet_barcode": "pl705970976005-1", //шк паллеты
    "sticker_barcode": "WB_003234" //шк текстового стикера маркетплейса
}

Ответ

{
    "success": true
}
FBO WB/OZON API

/api/lite/orders/packing/fbm/sticker/xls

/api/lite/orders/packing/fbm/sticker/xls

Позволяет скачать сопоставление ШК упакованных мест

параметр id - ИД заказа, обязательный

пример:

/api/lite/orders/packing/fbm/sticker/xls?id=2502-123447

Ответ

{
    "exportResults": [
        {
            "fileID": "export_order_2502-123447",
            "fileUrl": "https://storage.yandexcloud.net/items-export-kak2c/export_orders_test@tempo.ru_09.11.2021_21-53-03.xls",
            "rowsTotal": 1,
            "success": true
        }
    ],
    "recordsTotal": 1,
    "success": true
}

 

 

/api/lite/orders/packing/fbm/sticker/xls

Импортирует сопоставление ШК из экселя

Используется заголовок запроса Content-type: multipart/form-data.

В качестве параметров запроса передается:

Ответ

{
    "success": true
}
FBO WB/OZON API

/api/lite/orders/fbo/delivery/warehouses

/api/lite/orders/fbo/delivery/warehouses

Позволяет получить список возможных адресов доставки для FBO заказов

параметр fbmType - тип FBM, обязательный. Возможные значения: OZON, WILDBERRIES

пример:

/api/lite/orders/fbo/delivery/warehouses?fbmType=WILDBERRIES

Ответ

{
    "addresses": [
        {
            "availabilityClass": 1,
            "city": "Подольск",
            "cityFias": "b22cf685-e391-42c8-aab5-a9aadb9193d4",
            "country": "Россия",
            "fbmType": "WILDBERRIES",
            "fullAddress": "Московская обл, г Подольск, ул Поливановская, д 9",
            "house": "9",
            "name": "Wildberries Подольск",
            "region": "Московская",
            "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
            "street": "Поливановская",
            "zip": "142103"
        },
        {
            "availabilityClass": 1,
            "city": "Подольск",
            "cityFias": "b22cf685-e391-42c8-aab5-a9aadb9193d4",
            "country": "Россия",
            "fbmType": "WILDBERRIES",
            "fullAddress": "Московская обл, г Подольск, деревня Коледино, ул Троицкая, стр 20",
            "house": "20",
            "name": "Wildberries Коледино",
            "region": "Московская",
            "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
            "settlement": "Коледино",
            "settlementFias": "6473edb3-f716-4987-ac0d-60068c2f0bb4",
            "street": "Троицкая ",
            "zip": "142181"
        },
        {
            "area": "Ногинск",
            "areaFias": "40ae04e3-9a69-44ea-8bd7-6c6f08e1a4ca",
            "availabilityClass": 1,
            "city": "Ногинск",
            "cityFias": "40ae04e3-9a69-44ea-8bd7-6c6f08e1a4ca",
            "country": "Россия",
            "fbmType": "WILDBERRIES",
            "fullAddress": "Московская обл, г Ногинск, рп Обухово, тер Атлант-Парк, д 35 ",
            "house": "35",
            "name": "WILDBERRIES Обухово",
            "region": "Московская",
            "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
            "settlement": "Атлант-Парк (рп Обухово)",
            "settlementFias": "72c5aacd-c5af-46c4-a1fa-0768c4fa0cf7",
            "zip": "142440"
        },
        {
            "area": "Марушкинское",
            "areaFias": "37477930-7e8d-47f6-89a0-f6ad39e946c9",
            "availabilityClass": 2,
            "city": "Москва",
            "cityFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
            "country": "Россия",
            "fbmType": "WILDBERRIES",
            "fullAddress": "г Москва, поселение Марушкинское, кв-л 8",
            "name": "Wildberries Внуково",
            "region": "Москва",
            "regionFias": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
            "settlement": "кв-л 8",
            "settlementFias": "86e37fff-3ffe-4ff9-986d-fa214853b764",
            "zip": "108809"
        },
        {
            "availabilityClass": 2,
            "building": "7",
            "city": "Чехов",
            "cityFias": "7eeb876e-7b67-4ed7-91ec-0588712db96c",
            "country": "Россия",
            "fbmType": "WILDBERRIES",
            "fullAddress": "Московская обл, г Чехов, село Новоселки, тер промышленная зона Новоселки, влд 11 стр 7",
            "house": "11",
            "name": "Wildberries Чехов 2",
            "region": "Московская",
            "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
            "settlement": "Березка СХ2 (село Новоселки)",
            "settlementFias": "5d4ab092-eaf2-4ffa-ae4f-a60916511063",
            "zip": "142326"
        },
        {
            "availabilityClass": 2,
            "city": "Электросталь",
            "cityFias": "e0b171b6-bf2e-4d68-ab05-4d42ab2b375a",
            "country": "Россия",
            "fbmType": "WILDBERRIES",
            "fullAddress": "Московская обл, г Электросталь, поселок Случайный, тер Массив 3, д 5",
            "house": "5",
            "name": "Wildberries Электросталь",
            "region": "Московская",
            "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
            "settlement": "Массив 3 (поселок Случайный)",
            "settlementFias": "89efc91f-6875-4527-b27e-3fb03dc94971",
            "zip": "144004"
        },
        {
            "area": "Пушкино",
            "areaFias": "7f22cfa4-34fa-4fa0-bcb0-620cd8402cfa",
            "availabilityClass": 1,
            "block": "4",
            "city": "Пушкино",
            "cityFias": "7f22cfa4-34fa-4fa0-bcb0-620cd8402cfa",
            "country": "Россия",
            "fbmType": "WILDBERRIES",
            "fullAddress": "Московская обл, г Пушкино, тер 33-й км автодороги М8 Холмогоры, д 16в",
            "house": "16в",
            "name": "Wildberries Пушкино",
            "region": "Московская",
            "regionFias": "29251dcf-00a1-4e34-98d4-5c47484a36d4",
            "settlement": "33-й км автодороги М8 Холмогоры",
            "settlementFias": "a9b12f5e-b2c4-48b6-9cf3-31923f4750a1",
            "zip": "141202"
        }
    ],
    "success": true
}

 

Сервис уведомлений (Кактус)

Апи для работы с настройкой уведомлений для аккаунта

Сервис уведомлений (Кактус)

/api/lite/domain_notification

Создание нового уведомления

/api/lite/domain_notification

Для регистрации необходимо выполнить следующий запрос

{
    "notificationType" : "PURCHASE_CREATED",
    "notificationChannels" : ["EMAIL","SMS"],
    "notificationReceivers" : "test@email.com,test2@notasoft.ru"
}

Обязательные поля: notificationType, notificationChannels, notificationReceivers

Также  необходимо в Header добавить domain, в котором указать нужный домен магазина и авторизацию

notificationType

enum 

Может содержать значения -> Смотри пункт апи - "Получение возможных типов уведомлений"

notificationChannels

[]enum 

Может содержать значения SMS, EMAIL,TELEGRAM, WHATSAPP

Так же можно получить все актуальные возможные значения вызвав соответствующий пункт апи

notificationReceivers

String

Логины пользователей через запятую, которым нужно отправить уведомление

Успех

возвращается id созданного уведомления

{
    "success": true,
    "id": "efea87fb-91d7-b2f6-d705-148727002b13"
}

Ошибка

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Не задан тип уведомлений"
        }
    ]
}

Обновление уведомления

/api/lite/domain_notification

Для обновления нужно дополнительно указать id, далее указать нужные для обновления поля

{
    "id" : "efea87fb-91d7-b2f6-d705-148727002b13",
    "notificationChannels" : ["EMAIL"],
    "notificationReceivers" : "test@email.com"
}

Успех

возвращается id созданного уведомления

{
    "success": true,
    "id": "efea87fb-91d7-b2f6-d705-148727002b13"
}

Ошибка

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Данное уведомление не найдено"
        }
    ]
}

 

 

Сервис уведомлений (Кактус)

GET /api/lite/domain_notification

Получение всех уведомлений для аккаунта

/api/lite/domain_notification

Метод возвращает список уведомлений текущего аккаунта.

Параметры:

Пр. /api/lite/domain_notification/?type=PURCHASE_COMPLETED

Пример результата запроса

{
    "success": true,
    "notifications": [
        {
            "id": "efea87fb-91d7-b2f6-d705-148727002b13",
            "notificationType": "PURCHASE_CREATED",
            "notificationChannels": [
                "EMAIL",
                "SMS"
            ],
            "notificationReceivers": "donchenko.y@notasoft.ru"
        }
    ]
}

Ошибка:

{
  "success": false,
  "errors": [{"code": 0,"message": "Текст ошибки"}]
}
Сервис уведомлений (Кактус)

DELETE /api/lite/domain_notification

Удаление уведомления

api/customer/info

Производит удаление данного уведомления.

Параметры:

api/customer/info?id=efea87fb-91d7-b2f6-d705-148727002b13

Успех

возвращается id удаленного уведомления

{
    "success": true,
    "id": "efea87fb-91d7-b2f6-d705-148727002b13"
}

Ошибка

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Данное уведомление не найдено"
        }
    ]
}

 

 

Сервис уведомлений (Кактус)

/api/lite/domain_notification/{id}

Поиск определенного уведомления

 

/api/lite/domain_notification/{id}

Производит поиск уведомлния

/api/lite/domain_notification/efea87fb-91d7-b2f6-d705-148727002b13

Успех

возвращается найденное уведомление

{
    "id": "efea87fb-91d7-b2f6-d705-148727002b13",
    "notificationType": "PURCHASE_CREATED",
    "notificationChannels": [
        "EMAIL"
    ],
    "notificationReceivers": "test@email.com"
}

Ошибка

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Данное уведомление не найдено"
        }
    ]
}

 

Сервис уведомлений (Кактус)

/api/lite/domain_notification/types

Получение возможных типов уведомлений

 

/api/lite/domain_notification/types

Метод возвращает список всех возможных типов уведомлений и их значения

Пример результата запроса

{
    "success": true,
    "types": [
        {
            "type": "PURCHASE_CREATED",
            "value": "Поставка успешно создана"
        },
        {
            "type": "PURCHASE_EXPORTED_FF",
            "value": "Поставка успешно выгружена на Фулфилмент"
        },
        {
            "type": "PURCHASE_EXPORT_FF_ERROR",
            "value": "Ошибка выгрузки на Фулфилмент"
        },
        {
            "type": "PURCHASE_TAKE_IN_PROCESS",
            "value": "Поставка в процессе приемки"
        },
        {
            "type": "PURCHASE_COMPLETED",
            "value": "Поставка успешно принята"
        },
        {
            "type": "PURCHASE_COMPLETED_WITH_DIFFERENCE",
            "value": "Поставка принята с расхождениями"
        },
        {
            "type": "PURCHASE_COMPLETED_WITH_BRAK",
            "value": "Поставка принята с браком"
        },
        {
            "type": "PURCHASE_CANCELED",
            "value": "Поставка отменена"
        },
        {
            "type": "ORDER_CREATED_FROM_CHECKOUT",
            "value": "Оформлен через умную корзину"
        },
        {
            "type": "ORDER_CREATED_FROM_MARKETPLACE",
            "value": "Оформлен по маркетплейсам"
        },
        {
            "type": "ORDER_CREATED_FROM_ESHOP",
            "value": "Оформлен из магазина"
        },
        {
            "type": "ORDER_CREATED_FROM_PRIVATE_API",
            "value": "Оформлен по АПИ менеджера"
        },
        {
            "type": "ORDER_CREATE_ERROR",
            "value": "Ошибка при создании"
        },
        {
            "type": "ORDER_ONLINE_PAID_OK",
            "value": "Успешно оплачен онлайн"
        },
        {
            "type": "ORDER_INSUFFICIENT_RESERVE",
            "value": "Не хватает резервов"
        },
        {
            "type": "ORDER_EXPORT_FF_ERROR",
            "value": "Ошибка выгрузки на Фулфилмент"
        },
        {
            "type": "ORDER_IN_PACKING",
            "value": "На сборке"
        },
        {
            "type": "ORDER_PACKED",
            "value": "Упакован"
        },
        {
            "type": "ORDER_SHIPPED",
            "value": "Отгружен"
        },
        {
            "type": "ORDER_IN_DELIVERY",
            "value": "На доставке"
        },
        {
            "type": "ORDER_AT_TAKEOUT_POINT",
            "value": "Доставлен в ПВЗ/отделение"
        },
        {
            "type": "ORDER_AT_TAKEOUT_POINT_DEADLINE",
            "value": "Доставлен в ПВЗ/отделение, но еще не получен"
        },
        {
            "type": "ORDER_DONE",
            "value": "Выполнен"
        },
        {
            "type": "ORDER_RETURNING",
            "value": "Возвращается"
        },
        {
            "type": "ORDER_RETURNED",
            "value": "Возвращен"
        }
    ]
}

 

Сервис уведомлений (Кактус)

/api/lite/domain_notification/channels

Получение возможных каналов для отправки уведомлений

 

/api/lite/domain_notification/channels

Метод возвращает список всех возможных каналов для отправки уведомлений

Пример результата запроса

{
    "success": true,
    "types": [
        {
            "type": "SMS",
            "value": "SMS"
        },
        {
            "type": "EMAIL",
            "value": "EMAIL"
        },
        {
            "type": "TELEGRAM",
            "value": "TELEGRAM"
        },
        {
            "type": "WHATSAPP",
            "value": "WHATSAPP"
        }
    ]
}

 

Физические наборы

Физические наборы

/api/lite/physical_set_orders

Запрос списка заданий на сборку/разборку

/api/lite/physical_set_orders

Метод возвращает список заданий с заданной фильтрацией.

Фильтрация

Для фильтрации используется параметр query. Если он задан, то будут показаны задания на сборку/разборку наборов, которые содержат query в id, артикуле, имени или ШК. 

Также есть параметры dateFrom и dateTo для фильтра по датам

Пример: /api/lite/physical_set_orders?query=1038&dateFrom=2023-01-10T15:35:46&dateTo=2023-02-02T15:35:46

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: /api/lite/physical_set_orders?page=0&size=100

Если параметры не переданы, то дефолтные значения page=0&size=100

 

Пример результата запроса

{
    "physicalSetOrders": [
        {
            "id": "1008",
            "createTs": "2021-01-13 17:23:44.058",
            "action": "ASSEMBLY", // DISASSEMBLY
            "status": "NEW", // IN_PROCESS, DONE
            "quantity": 2,
            "physicalSet": {
                "id": "1044",
                "shortName": "Набор ложек",
                "article": null,
                "images": null,
                "items": [
                    {
                        "id": "1042",
                        "shortName": "Ложка",
                        "article": "loz",
                        "quantity": 2,
                        "images": null
                    }
                ]
            }
        }
    ]
}

 

Создание задания на сборку/разборку

/api/lite/physical_set_orders

Создает задание на сборку/разборку физического набора.

Пример запроса

{
    "variantId": "1044",
    "quantity": 2,
    "warehouseCode": "2970c244-20f4-bab8-4c29-b04504281120",
    "action": "ASSEMBLY" // DISASSEMBLY
}

Успех:

{
  	"id": "1047",
    "success": true
}

Ошибка: 

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}

 

Копирование задания на сборку/разборку

/api/lite/physical_set_orders/copy

Копирует задание на сборку/разборку физического набора

Пример запроса

{
    "id": "1008"
}

Успех:

{
    "success": true
}

Ошибка: 

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}

 

 

Физические наборы

/api/lite/products/physical_sets

Запрос списка физических наборов

/api/lite/products/physical_sets

Метод возвращает список наборов с заданной фильтрацией.

Фильтрация

Для фильтрации используется параметр query. Если он задан, то будут показаны наборы, содержащие query в id, артикуле, имени или ШК.

Для поиска только по id можно использовать параметр "id".

 

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: /api/lite/products/physical_sets?page=0&size=100

Если параметры не переданы, то дефолтные значения page=0&size=100

 

Пример результата запроса

{
    "physicalSets": [
        {
            "id": "1044",
            "shortName": "Набор ложек",
            "article": null,
            "images": null,
            "price": null,
            "stockAvailable": 0,
            "barcodes": [
                {
                    "value": "70100401010210",
                    "isDefault": false,
                    "type": "COMMON"
                }
            ],
            "items": [
                {
                    "id": "1042",
                    "shortName": "Ложка",
                    "article": "loz",
                    "quantity": 2,
                    "images": null,
                    "price": "50.00",
                    "stockAvailable": 45,
                    "barcodes": [
                        {
                            "value": "70100401010204",
                            "isDefault": true,
                            "type": "COMMON"
                        }
                    ]
                }
            ]
        }
    ]
}

 

Создание/редактирование физического набора

/api/lite/products/physical_sets

Делает из существующего товара физический набор. Если состав набора пустой, то набор будет преобразован обратно в обычный товар

Пример запроса

{
    "id": "1044",
    "items": [
        {
            "id": "1042",
            "quantity": 2
        }
    ]
}

Успех:

{
    "success": true
}

Ошибка: 

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}
Физические наборы

/api/lite/products/sku_sets

Запрос списка наборов

/api/lite/products/sku_sets

Метод возвращает список наборов с заданной фильтрацией.

Фильтрация

Для фильтрации используется параметр query. Если он задан, то будут показаны наборы, содержащие query в id, артикуле, имени или ШК.

Для поиска только по id можно использовать параметр "id".

Для фильтрации по типу набора можно использовать параметр "type". Возможные значения: BUNDLE и PHYSICAL_SET

 

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: /api/lite/products/physical_sets?page=0&size=100

Если параметры не переданы, то дефолтные значения page=0&size=100

 

Пример результата запроса

{
    "skuSets": [
        {
            "id": "1044",
            "shortName": "Набор ложек",
            "article": null,
          	"skuType": "BUNDLE", // PHYSICAL_SET
          	"bundleOptionalCount": 0,
            "images": null,
            "price": null,
            "stockAvailable": 0,
            "barcodes": [
                {
                    "value": "70100401010210",
                    "isDefault": false,
                    "type": "COMMON"
                }
            ],
            "items": [
                {
                    "id": "1042",
                    "shortName": "Ложка",
                    "article": "loz",
                    "quantity": 2,
                    "images": null,
                    "price": "50.00",
                    "stockAvailable": 45,
                    "barcodes": [
                        {
                            "value": "70100401010204",
                            "isDefault": true,
                            "type": "COMMON"
                        }
                    ],
                  	"optional": false
                }
            ]
        }
    ]
}

 

Создание/редактирование набора

/api/lite/products/sku_sets

Делает из существующего товара физический набор. Если состав набора пустой, то набор будет преобразован обратно в обычный товар

Пример запроса

{
    "id": "1044",
    "skuType": "PHYSICAL_SET",
    "bundleOptionalCount": 0,
    "items": [
        {
            "id": "1042",
            "quantity": 2,
          	"optional": false
        }
    ]
}

Успех:

{
    "success": true
}

Ошибка: 

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}

 

 

Физические наборы

/api/lite/pub/products/sku_sets

/api/lite/pub/products/sku_sets

Аналогичен приватному методу

Наложенные платежи

Наложенные платежи

/api/lite/cod_payments

Запрос списка обработанных наложенных платежей

/api/lite/cod_payments

Метод возвращает список наложенных платежей, поступивших на аккаунт

Опциональные параметры:

id - номер платежа

dateFrom
dateTo - фильтр по дате исполнения платежа (executionTime), в формате yyyy-MM-dd'T'HH:mm:ss

Пейджинация

Для пейджинации используются параметры page и size: size - записей на странице, page - номер страницы.

Пример: /api/lite/cod_payments?page=0&size=10

Если параметры не переданы, то дефолтные значения page=0&size=15

 

Пример результата запроса

{
    "payments": [
        {
            "activated": true,
            "date": "2021-04-10 10:00:00",
            "executionTime": "2021-02-17 18:00:00",
            "id": "OST-1000317",
            "inn": "123456789",
            "items": [
                {
                    "num": 1,
                    "orderId": "8477-3900",
                    "sum": 3260,
                    "trackingNum": "1192306085"
                }
            ],
            "orgName": "ООО Привет",
            "paymentId": "33342",
            "updateTs": "2021-07-08 19:09:03.020"
        }
    ],
    "recordsTotal": 1,
    "success": true
}

 

API osTicket

API osTicket

Общее описание

Все запросы к API osTicket http post. Ко всем передаются следующие http-заголовки:

X-API-Key - Ключ API-доступа к osticket

User-Login - Логин пользователя osTicket, от имени которого выполняется запрос. Должен быть правильным email.

User-Password - Пароль пользователя. Не используется для специальных API ключей, работающих совместно с авторизацией lk2.

Запрос должен содержать хотя бы один post-параметр. Если параметры по логике запроса не нужны, его следует вызывать с параметром-заглушкой.

{
	"param": 1
}
API osTicket

/api/tickets.json

Создает тикет.

{
  "success": true,
  "number":"219600",
  "is_working_now":false,
  "not_working_message":"График работы сервисного отдела ежедневно с 9:00 до 21:00. Мы ответим Вам в рабочие часы. Спасибо за обращение!"
}
{
	"success": true,
  	"number": "526252",
  	"id": 224336
}

Пример запроса:

{
  "subject":"777", 
  "message":"data:text/html;charset=utf-8,<p>Пробное сообщение</p>",
  "topicId":103,
  "returnJson": true,
  "attachments":[
    	{"logo-color.svg":"data:image/svg+xml;base64,..."},
        {"test.log":"data:text/x-log;base64,..."}
  ]
}
API osTicket

/api/tickets/get.json

Возвращает список тикетов пользователя, переданного в http-заголовке запроса

Все параметры не обязательны.

{
	"page":0,
    "size":10,
    "search":"878",
    "direction":"outbound",
  	"collaborator_visibility": true,
  	"org_visibility": true,
  	"unreaded_only": true,
    "subject": "171220-41656-1959"
  	"updated_from": "2022-08-08 23:08:09"
  	"number":"367871"
  	"ticket_id":"203300"
}

Пример возвращаемого значения:

{
	"success": true,
  	"recordsTotal":26,
	"tickets": [
    	{
        	"ticket_id":34901,
            "subject":"тестовый номер 777",
            "status_id":2,
            "status":"Проблема решена",
            "number":"651265",
            "isanswered":0,
            "state":"closed",
            "created":"2021-02-08 13:35:08",
            "message":"Пробное сообщение",
            "topic_id":103,
            "unreaded":false,
            "direction":"outbound",
            "reopenable":true,
          	"user_id": 10,
            "user_login": "test@mail.ru",
            "user_name": "Иван",
          	"updated": "2022-05-06 14:28:14"
        },

		{
        	"ticket_id":12514,
            "subject":"888-888",
            "status_id":3,
            "status":"Закрыт",
            "number":"840372",
            "isanswered":0,
            "state":"closed",
            "created":"2020-12-09 19:15:19",
            "message":"Тестовое сообщение",
            "topic_id":1,
            "unreaded":false,
            "direction":"outbound",
            "reopenable":false,
          	"user_id": 12,
            "user_login": "test2@mail.ru",
            "user_name": "Петр",
          	"updated": "2022-05-06 14:28:14"
        },
    ]
}

Если в заголовке передан логин пользователя, отсутствующий в osTicket запрос не завершается ошибкой а возвращает следующий ответ:

{
	"account_not_found": 1
}

Это можно использовать для авторегистрации пользователей при первом обращении к функционалу osTicket.

API osTicket

/api/tickets/thread.json

Возвращает цепочку переписки данного тикета

{
	"ticket_id":34937
}

Пример возвращаемого значения

 

{
  	"success": true,
	"messages": [
		{
          "id":1074256,
          "type":"M",
          "is_staff":false,
          "author":"Slava",
          "user_login":"slava-sh@yandex.ru",
          "created":"2023-03-14 23:34:02",
          "title":null,
          "message":"<p>Новая заявка<\/p>",
          "attachments":[
          	{
				"size": 26556,
				"url": "https://ticket.kak2c.ru/file.php?key=f-5x9e888ngsiuvsgeuy_ge59gczgnsu&expires=1612828800&signature=ae890af39b6ba9e4659ec5f221b7a4a4d24b5904&id=6866",
				"name": "baner-1.jpg"
			}
          ]
        },
      	{
          "id":1074257,
          "type":"R",
          "is_staff":true,
          "author":"admin notasoft",
          "user_login":"adm1@notasoft.ru",
          "created":"2023-03-14 23:54:33",
          "title":null,
          "message":"<p>Привет!<\/p>",
          "attachments":[]
      	}
	]
}
API osTicket

/api/tickets/getunreaded.json

Возвращает количество непрочитанных пользователем сообщений. Учитываются только тикеты владелец которого данный пользователь. Не учитываются тикеты других пользователей организации и те в которых данный пользователь соавтор. Пример возвращаемого результата:

{
  	"success": true,
	"unreadedCount": 2
}

 

API osTicket

/api/tickets/message.json

Отправка сообщения в ветку тикета (ответа на тикет)

{
	"attachments": [
		{
			"p-14334.jpg": "data:image/jpeg;base64,..."
		}
	],
	"is_resolved": true,
	"message": "data:text/html;charset=utf-8,<p>Ответ на сообщение</p>",
	"ticket_id": 34937
}

Ответ:

{
	"success": true,
    "message_id":1074273
}
API osTicket

/api/tickets/unreaded.json

Помечает тикет как прочитанный или непрочитанный:

{
	"ticket_id": 34960,
	"value": false
}

Возвращает

{
	"success": true
}
API osTicket

/api/tickets/gettopics.json

Возвращает справочник категорий и тем тикетов

[
    {
        "value": 2,
        "label": "Общие вопросы",
        "fields": [],
        "order": "1",
        "isMassSending": false,
        "children": [
            {
                "value": 12,
                "label": "Возможности Кактуса",
                "fields": [],
                "order": 1000000,
                "isMassSending": false
            },
            {
                "value": 131,
                "label": "Делопроизводство",
                "fields": [],
                "order": 1000000,
                "isMassSending": false
            },
            {
                "value": 16,
                "label": "Возможности личного кабинета",
                "fields": [],
                "order": 1000000,
                "isMassSending": false
            },
            {
                "value": 17,
                "label": "Доступная отчетность",
                "fields": [],
                "order": 1000000,
                "isMassSending": false
            },
            {
                "value": 19,
                "label": "Как вызвать курьера?",
                "fields": [],
                "order": 1000000,
                "isMassSending": false
            },
            {
                "value": 14,
                "label": "Тарифы и условия",
                "fields": [],
                "order": 1000000,
                "isMassSending": false
            },
            {
                "value": 13,
                "label": "Услуги и их стоимость",
                "fields": [],
                "order": 1000000,
                "isMassSending": false
            }
        ]
    },
    {
        "value": 1,
        "label": "Старт работы",
        "fields": [],
        "order": "2",
        "isMassSending": false,
        "children": [
            {
                "value": 23,
                "label": "КП Кактус.Доставка",
                "fields": [
                    {
                        "value": "dogovor",
                        "label": "Номер договора клиента",
                        "note_field": "номер_договора_клиента",
                        "moderatory": false
                    },
                    {
                        "value": "company",
                        "label": "Юрлицо",
                        "note_field": "юрлицо",
                        "moderatory": false
                    }
                ],
                "order": "1",
                "isMassSending": false
            },
            {
                "value": 20,
                "label": "КП Кактус.Фулфилмент",
                "fields": [
                    {
                        "value": "dogovor",
                        "label": "Номер договора клиента",
                        "note_field": "номер_договора_клиента",
                        "moderatory": false
                    },
                    {
                        "value": "company",
                        "label": "Юрлицо",
                        "note_field": "юрлицо",
                        "moderatory": false
                    }
                ],
                "order": "2",
                "isMassSending": false
            },
            {
                "value": 24,
                "label": "Условия договора",
                "fields": [
                    {
                        "value": "dogovor",
                        "label": "Номер договора клиента",
                        "note_field": "номер_договора_клиента",
                        "moderatory": false
                    },
                    {
                        "value": "company",
                        "label": "Юрлицо",
                        "note_field": "юрлицо",
                        "moderatory": false
                    }
                ],
                "order": "3",
                "isMassSending": false
            },
            {
                "value": 25,
                "label": "Доп условия",
                "fields": [
                    {
                        "value": "dogovor",
                        "label": "Номер договора клиента",
                        "note_field": "номер_договора_клиента",
                        "moderatory": false
                    },
                    {
                        "value": "company",
                        "label": "Юрлицо",
                        "note_field": "юрлицо",
                        "moderatory": false
                    }
                ],
                "order": "4",
                "isMassSending": false
            },
            {
                "value": 118,
                "label": "Техниче\u0441кие вопросы",
                "fields": [],
                "order": "5",
                "isMassSending": false
            },
            {
                "value": 26,
                "label": "Другое",
                "fields": [
                    {
                        "value": "dogovor",
                        "label": "Номер договора клиента",
                        "note_field": "номер_договора_клиента",
                        "moderatory": false
                    },
                    {
                        "value": "company",
                        "label": "Юрлицо",
                        "note_field": "юрлицо",
                        "moderatory": false
                    }
                ],
                "order": "6",
                "isMassSending": false
            }
        ]
    },
  
  ...
]
API osTicket

/api/tickets/threads.json

Возвращает цепочку переписки нескольких тикетов

{
    "updated_from": "2023-01-01 00:00:00",
    "ticket_ids":["203296","195327"]
}

Пример возвращаемого значения, содержимое массива messages для каждого тикета аналогично одноименному массиву, описанному здесь 

{
    "success": true,
  	"tickets":[
        {
            "ticket_id":203296,
            "messages":[
                {
                    "id":1074256,
                    "type":"M",
                    "is_staff":false,
                    "author":"Slava",
                    "created":"2023-03-14 23:34:02",
                    "title":null,
                    "message":"<p>Новая заявка</p>",
                    "attachments":[]
                },
                {
                    "id":1074257,
                    "type":"R",
                    "is_staff":true,
                    "author":"admin notasoft",
                    "created":"2023-03-14 23:54:33",
                    "title":null,
                    "message":"<p>Привет!</p>",
                    "attachments":[]
                }
            ]
        },
        {
            "ticket_id":203297,
            "messages": [
                {
                    "id":1074260,
                    "type":"M",
                    "is_staff":false,
                    "author":"Slava",
                    "created":"2023-03-21 01:43:53",
                    "title":"Другой вопрос",
                    "message":"<p>Проверка статусов</p>",
                    "attachments":[]
                }
            ]
        }
    ]
}

Биллинг

Биллинг

/api/lite/billing/documents

Запрос списка документов

/api/lite/billing/documents

Метод возвращает список документов. Можно использовать для получения списка или одного документа

Параметры

Пример результата запроса

{
    "success": true,
    "recordsTotal": 14,
    "documents": [
        {
            "id": "222",
            "type": "BILL",
            "status": "PAID", // NEW, AWAITING_PAYMENT, PARTIALLY_PAID, EXPIRED
            "title": "Счет на аванс.",
            "date": "2021-06-03 15:17:42",
            "vatSum": 166.67,
            "totalSum": 1000.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Сумма аванса 40%",
                    "description": null,
                    "measure": null,
                    "amount": 1.00,
                    "price": 0.00,
                    "totalSum": 1000.00
                }
            ],
            "relations": []
        },
        {
            "id": "333",
            "type": "BILL",
            "status": "PAID",
            "title": "Счет на доплату.",
            "date": "2021-06-03 15:17:42",
            "vatSum": 12574.33,
            "totalSum": 75446.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Крепеж бирки",
                    "description": null,
                    "measure": "ед. товара",
                    "amount": 100.00,
                    "price": 12.00,
                    "totalSum": 1200.00
                },
                {
                    "num": 2,
                    "title": "Мелкоячеечное хранение",
                    "description": null,
                    "measure": "ячейка/сутки",
                    "amount": 100.00,
                    "price": 13.20,
                    "totalSum": 1320.00
                },
                {
                    "num": 3,
                    "title": "Дополнительные работы по запросу Заказчика",
                    "description": null,
                    "measure": "час",
                    "amount": 555.00,
                    "price": 133.20,
                    "totalSum": 73926.00
                },
                {
                    "num": 4,
                    "title": "Сумма переплаты",
                    "description": null,
                    "measure": null,
                    "amount": 1.00,
                    "price": 0.00,
                    "totalSum": -1000.00
                }
            ],
            "relations": []
        },
        {
            "id": "1025",
            "type": "EXPENSE",
            "subType": "POSTPAID",
            "status": "AWAITING_PAYMENT",
            "title": "Списание",
            "description": "Оплата за услуги за апрель",
            "date": "2021-06-03 15:17:26",
            "deadline": "2021-06-17 01:00:00",
            "vatSum": 12574.33,
            "totalSum": 75446.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Крепеж бирки",
                    "description": null,
                    "measure": "ед. товара",
                    "amount": 100.00,
                    "price": 12.00,
                    "totalSum": 1200.00
                },
                {
                    "num": 2,
                    "title": "Мелкоячеечное хранение",
                    "description": null,
                    "measure": "ячейка/сутки",
                    "amount": 100.00,
                    "price": 13.20,
                    "totalSum": 1320.00
                },
                {
                    "num": 3,
                    "title": "Дополнительные работы по запросу Заказчика",
                    "description": null,
                    "measure": "час",
                    "amount": 555.00,
                    "price": 133.20,
                    "totalSum": 73926.00
                },
                {
                    "num": 4,
                    "title": "Сумма переплаты",
                    "description": null,
                    "measure": null,
                    "amount": 1.00,
                    "price": 0.00,
                    "totalSum": -1000.00
                }
            ],
            "relations": []
        },
        {
            "id": "1024",
            "type": "EXPENSE",
            "subType": "PREPAYMENT",
            "status": "AWAITING_PAYMENT",
            "title": "Списание",
            "description": "Аванс за апрель",
            "date": "2021-06-03 15:17:21",
            "deadline": "2021-06-17 01:00:00",
            "vatSum": 167.00,
            "totalSum": 1000.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Сумма аванса 40%",
                    "description": null,
                    "measure": null,
                    "amount": 1.00,
                    "price": 0.00,
                    "totalSum": 1000.00
                }
            ],
            "relations": []
        },
        {
            "id": "111",
            "type": "REPORT",
            "title": "Акт выполненных работ за апрель 2021",
            "date": "2021-06-03 15:16:19",
            "vatSum": 12741.00,
            "totalSum": 76446.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Крепеж бирки",
                    "description": null,
                    "measure": "ед. товара",
                    "amount": 100.00,
                    "price": 12.00,
                    "totalSum": 1200.00
                },
                {
                    "num": 2,
                    "title": "Мелкоячеечное хранение",
                    "description": null,
                    "measure": "ячейка/сутки",
                    "amount": 100.00,
                    "price": 13.20,
                    "totalSum": 1320.00
                },
                {
                    "num": 3,
                    "title": "Дополнительные работы по запросу Заказчика",
                    "description": null,
                    "measure": "час",
                    "amount": 555.00,
                    "price": 133.20,
                    "totalSum": 73926.00
                }
            ],
            "relations": []
        },
        {
            "id": "1023",
            "type": "EXPENSE",
            "subType": "POSTPAID",
            "status": "AWAITING_PAYMENT",
            "title": "Списание по акту выполненных работ",
            "date": "2021-06-03 14:54:03",
            "deadline": "2021-06-17 01:00:00",
            "vatSum": 12574.33,
            "totalSum": 75446.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Крепеж бирки",
                    "description": null,
                    "measure": "ед. товара",
                    "amount": 100.00,
                    "price": 12.00,
                    "totalSum": 1200.00
                },
                {
                    "num": 2,
                    "title": "Мелкоячеечное хранение",
                    "description": null,
                    "measure": "ячейка/сутки",
                    "amount": 100.00,
                    "price": 13.20,
                    "totalSum": 1320.00
                },
                {
                    "num": 3,
                    "title": "Дополнительные работы по запросу Заказчика",
                    "description": null,
                    "measure": "час",
                    "amount": 555.00,
                    "price": 133.20,
                    "totalSum": 73926.00
                },
                {
                    "num": 4,
                    "title": "Сумма переплаты",
                    "description": null,
                    "measure": null,
                    "amount": 1.00,
                    "price": 0.00,
                    "totalSum": -1000.00
                }
            ],
            "relations": []
        },
        {
            "id": "1022",
            "type": "EXPENSE",
            "subType": "PREPAYMENT",
            "status": "AWAITING_PAYMENT",
            "title": "Списание аванса.",
            "date": "2021-06-03 14:53:57",
            "deadline": "2021-06-17 01:00:00",
            "vatSum": 167.00,
            "totalSum": 1000.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Сумма аванса 40%",
                    "description": null,
                    "measure": null,
                    "amount": 1.00,
                    "price": 0.00,
                    "totalSum": 1000.00
                }
            ],
            "relations": []
        },
        {
            "id": "22252",
            "type": "PAYMENT",
            "title": "Поступление",
            "date": "2021-06-03 10:20:00",
            "vatSum": 0.00,
            "totalSum": 76446.00,
            "balanceSum": 0.00,
            "relations": [
                {
                    "id": "333",
                    "type": "BILL",
                    "title": "Счет на доплату.",
                    "date": "2021-06-03 15:17:42",
                    "relationSum": 75446.00
                },
                {
                    "id": "222",
                    "type": "BILL",
                    "title": "Счет на аванс.",
                    "date": "2021-06-03 15:17:42",
                    "relationSum": 1000.00
                }
            ]
        },
        {
            "id": "1021",
            "type": "EXPENSE",
            "subType": "POSTPAID",
            "status": "AWAITING_PAYMENT",
            "title": "Списание по акту выполненных работ",
            "date": "2021-06-03 10:18:27",
            "deadline": "2021-06-17 01:00:00",
            "vatSum": 12741.00,
            "totalSum": 76446.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Крепеж бирки",
                    "description": null,
                    "measure": "ед. товара",
                    "amount": 100.00,
                    "price": 12.00,
                    "totalSum": 1200.00
                },
                {
                    "num": 2,
                    "title": "Мелкоячеечное хранение",
                    "description": null,
                    "measure": "ячейка/сутки",
                    "amount": 100.00,
                    "price": 13.20,
                    "totalSum": 1320.00
                },
                {
                    "num": 3,
                    "title": "Дополнительные работы по запросу Заказчика",
                    "description": null,
                    "measure": "час",
                    "amount": 555.00,
                    "price": 133.20,
                    "totalSum": 73926.00
                }
            ],
            "relations": []
        },
        {
            "id": "33333",
            "type": "BILL",
            "status": "PAID",
            "title": "Счет \"Оплата по договору\"",
            "date": "2021-05-28 10:53:00",
            "vatSum": 12741.00,
            "totalSum": 76446.00,
            "balanceSum": 0.00,
            "items": [
                {
                    "num": 1,
                    "title": "Крепеж бирки",
                    "description": null,
                    "measure": "ед. товара",
                    "amount": 100.00,
                    "price": 10.00,
                    "totalSum": 1200.00
                },
                {
                    "num": 2,
                    "title": "Мелкоячеечное хранение",
                    "description": null,
                    "measure": "ячейка/сутки",
                    "amount": 100.00,
                    "price": 11.00,
                    "totalSum": 1320.00
                },
                {
                    "num": 3,
                    "title": "Дополнительные работы по запросу Заказчика",
                    "description": null,
                    "measure": "час",
                    "amount": 555.00,
                    "price": 111.00,
                    "totalSum": 73926.00
                }
            ],
            "relations": []
        }
    ]
}
Биллинг

/api/lite/billing/balance-history

Запрос истории баланса

/api/lite/billing/balance-history

Получает историю баланса на начало месяца за указанный период времени.
Включает значение баланса на даты date_from и date_to.
Если date_to больше текущей даты, то date_to будет заменена на текущее время

Параметры

Пример результата запроса

{
    "success": true,
    "history": [
        {
            "date": "2021-03-20 00:00:00",
            "balance": 0
        },
        {
            "date": "2021-04-01 00:00:00",
            "balance": 0
        },
        {
            "date": "2021-05-01 00:00:00",
            "balance": 73446.00
        },
        {
            "date": "2021-06-01 00:00:00",
            "balance": -3000.00
        },
        {
            "date": "2021-06-02 13:04:48",
            "balance": -3000.00
        }
    ]
}

Интеграции

Интеграции

/api/lite/eshops/for_mapping

Запрос списка интеграций

/api/lite/eshops/for_mapping

Метод возвращает список настроенных интеграций с внешними системами

{
    "eshops": [
        {
            "id": "e4a1920d-f154-7284-bad4-a7b9546032fe",
            "type": "BERU",
            "name": "Интеграция с Беру"
        },
        {
            "id": "c802ba97-55b5-98d9-c8db-9d01ab7499d2",
            "type": "WILDBERRIES",
            "name": "Интеграция с Wildberries"
        }
    ]
}

CAM

CAM

/api/lite/cam/delivery/contracts

Запрос списка контрактов

/api/lite/cam/delivery/contracts

Метод получает список каналов доставки

Фильтрация

Для поиска только по id можно использовать параметр "id".

Пример результата запроса

{
    "contracts": [
        {
            "dlvLogin": "brocosmetics@gmail.com",
            "courierCode": "DalliService",
            "courierProduct": "1",
            "icn": null,
            "login": "login",
            "password": "pass",
            "barcodePoolId": null,
            "token": null,
            "ownerCompany": "brocosmetics@gmail.com",
            "stock": null,
            "contractId": null,
            "params": [
            	{
                    "key": "paramKey",
                    "value": "paramValue"
                }
            ],
            "cactusId": "9b051eb5-82e5-5ed9-fa72-05aace3fd685",
            "cactusName": "Dalli МСК",
            "contractType": "AGGREGATOR_CONTRACT",
            "isActive": false,
            "isPublicAvailable": true,
            "externalKey": "28c53bc2-158f-4084-96c1-70118eb86f5a",
            "contractNumber": "DalliService_1",
            "stickerFileType": null,
            "deliveryAggregator": "TEMPOLINE",
            "manager": {
                "name": null,
                "surname": null,
                "patronymic": null,
                "phone": "+71112223344",
                "rawPhone": "+7 (111) 222-33-44",
                "alternativePhone": "",
                "email": null,
                "post": null,
                "personType": "CUSTOMER",
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Москва",
                    "area": null,
                    "city": "Москва",
                    "settlement": null,
                    "street": null,
                    "house": null,
                    "block": null,
                    "building": null,
                    "flat": null,
                    "fullAddress": null,
                    "fullCity": null,
                    "rawData": null,
                    "zip": null,
                    "regionFias": null,
                    "areaFias": null,
                    "cityFias": null,
                    "settlementFias": null
                }
            },
            "gatherRequestSettings": {
                "gatherType": "COURIER",
                "timetableNonMonday": false,
                "timetableNonTuesday": false,
                "timetableNonWednesday": false,
                "timetableNonThursday": false,
                "timetableNonFriday": false,
                "timetableNonSaturday": false,
                "timetableNonSunday": false,
                "timetableHolidays": null
            }
        }
    ]
}

 

Создание/редактирование контракта

/api/lite/cam/delivery/contracts

Создает контракт или редактирует существующий, если указан cactusId.

Пример запроса

{
    "dlvLogin": "brocosmetics@gmail.com",
    "courierCode": "DalliService",
    "courierProduct": "1",
    "icn": null,
    "login": "login",
    "password": "pass",
    "barcodePoolId": null,
    "token": null,
    "ownerCompany": "brocosmetics@gmail.com",
    "stock": null,
    "contractId": null,
    "params": [
        {
            "key": "paramKey",
            "value": "paramValue"
        }
    ],
    "cactusId": "9b051eb5-82e5-5ed9-fa72-05aace3fd685",
    "cactusName": "Dalli МСК",
    "contractType": "AGGREGATOR_CONTRACT",
    "isActive": false,
    "isPublicAvailable": true,
    "externalKey": "28c53bc2-158f-4084-96c1-70118eb86f5a",
    "contractNumber": "DalliService_1",
    "stickerFileType": null,
    "deliveryAggregator": "TEMPOLINE",
    "manager": {
        "name": null,
        "surname": null,
        "patronymic": null,
        "phone": "+7 (111) 222-33-44",
        "rawPhone": null,
        "alternativePhone": "",
        "email": null,
        "post": null,
        "personType": "CUSTOMER",
        "address": {
            "country": null,
            "countryCode": null,
            "region": "Москва",
            "area": null,
            "city": "Москва",
            "settlement": null,
            "street": null,
            "house": null,
            "block": null,
            "building": null,
            "flat": null,
            "fullAddress": null,
            "fullCity": null,
            "rawData": null,
            "zip": null,
            "regionFias": null,
            "areaFias": null,
            "cityFias": null,
            "settlementFias": null
        }
    },
    "gatherRequestSettings": {
        "gatherType": "COURIER",
        "timetableNonMonday": false,
        "timetableNonTuesday": false,
        "timetableNonWednesday": false,
        "timetableNonThursday": false,
        "timetableNonFriday": false,
        "timetableNonSaturday": false,
        "timetableNonSunday": false,
        "timetableHolidays": null
    }
}

Ошибка:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}

 

Удаление контракта

/api/lite/cam/delivery/contracts?id=9b051eb5-82e5-5ed9-fa72-05aace3fd685

Удаляет контракт с cactusId переданным в параметре "id"

 

 

CAM

/api/lite/cam/account/special

Запрос спец. настроек аккаунта

/api/lite/cam/account/special

Пример результата запроса

{
    "success": true,
    "clientNumber": "588589",
    "useCustomDlvTariffLogin": true,
    "tempBlockAccount": true,
    "autoReserveInsufficient": null,
    "isJurClient": null,
    "isPostfactumPaymentMode": null,
    "isContractOk": null,
    "commercialAccount": true,
    "allowSNG": true,
    "reserveAfterPayment": null,
    "country": null,
    "currency": "RUB"
}

 

Редактирование спец. настроек аккаунта

/api/lite/cam/account/special

Пример запроса

{
    "clientNumber": "588589",
    "useCustomDlvTariffLogin": true,
    "tempBlockAccount": true,
    "autoReserveInsufficient": null,
    "isJurClient": null,
    "isPostfactumPaymentMode": null,
    "isContractOk": null,
    "commercialAccount": true,
    "reserveAfterPayment": null,
    "country": null,
    "currency": "RUB"
}

Успешное обновление:

{
    "success": true
}

Ошибка:

{
    "success": false,
    "errors": [
        {
            "code": 0,
            "message": "Текст ошибки"
        }
    ]
}

 

 

 

Требования к передаче заказов

При передаче неполной информации о товарах или заказах, во время подтверждения заказа могут возникать ошибки, мешающие его автоматической обработке. Ниже представлен список данных, которые обязательно должны быть заполнены для того, чтобы обеспечить безошибочную работу в Кактусе.

Это абсолютный минимум необходимых данных.  Вероятнее всего, вам потребуется указать больше данных как о товаре, так и в заказе. Пожалуйста, опирайтесь на приложенные инструкции, которые помогут вам в работе.

1. Товары

Перед созданием заказа необходимо создать карточки товаров. Для этого можете воспользоваться данными инструкциями:

Инструкция по заведению товаров в ЛК вручную и с помощью импорта

API для работы с товарами

В товарах обязательно должны быть заполнены данные (более подробные примеры передачи данных полей по API вы найдёте в приложенной выше инструкции):

После создания товара и после изменения данных в нём обязательно выгружать товар на фулфилмент.

На момент подтверждения заказа для выгрузки его на упаковку остатки товаров должны быть ненулевыми (т.е., требуется принятая поставка).

Цену в карточке товара указывать не обязательно, но важно передать её в заказе.

2. Заказы

Инструкция по работе с заказами в ЛК Кактус

API для работы с заказами

Обязательно указать (более подробные примеры передачи данных полей вы найдёте в приложенной выше инструкции):

Пример запроса на создание заказа с минимальными данными

/api/lite/orders

{ 
            "id": "34567870",
            "totalOrderSum": 999,
            "insuranceSum": 999,
            "needReserve": true,
            "insuranceSumAutoCalculation": true,
            "paymentStatus": "PAID",
            "paymentMethodCode": "no-cod",
            "needCustomerPayment": true,
            "confirmStatus": "NEED_CONFIRM",
            "delivery": {
                "code": "0c985ad8-39dd-4d06-b36b-fb6042b092fd",
                "pickupPointId": "", #обязательное для доставки в ПВЗ
                "address": {
                    "country": "Россия",
                    "countryCode": "RU",
                    "region": "Алтайский",
                    "area": null,
                    "city": "Барнаул",
                    "settlement": null,
                    "street": "Комсомольская",
                    "house": "1",
                    "block": "",
                    "building": "",
                    "flat": "",
                    "fullAddress": "Алтайский, Барнаул",
                    "fullCity": null,
                    "rawData": null,
                    "zip": "",
                    "regionFias": "8276c6a1-1a86-4f0d-8920-aba34d4cc34a",
                    "areaFias": null,
                    "cityFias": "d13945a8-7017-46ab-b1e6-ede1e89317ad",
                    "settlementFias": null
                },
                "receiver": {
                    "name": "Петр",
                    "surname": "толстой 2",
                    "phone": "89011111111",
                    "email": "petr@petr.net"
                }
            },
            "items": [
                {
                    "num": 1,
                    "variantId": "demo1024",
                    "variantExtId": null,
                    "name": "Компьютер (демо товар)",
                    "quantity": 1,
                    "price": 522,
                    "vatRate": "VAT_10"
                },
                {
                    "num": 2,
                    "variantId": "delivery",
                    "name": "Доставка",
                    "quantity": 1,
                    "price": 35,
                    "vatRate": "VAT_20"
                }
            ],         
            "warehouseName": "Свой склад"
        }

Задание на стикерование

Задание на стикерование предназначено для документов которые необходимо стикеровать особым образом, например с уникальными номерами. Сейчас данный функционал реализован для Поставки и Комплектации(вся логика реализована в ветке 9063_new_chz_loading).

Создание редактирование задание на стикерование через json

/api/lite/sticker/task/json или /api/lite/sticker/task/{sticker_task_id}/json

Данный метод предназначен для загрузки или редактирования задания на стикерование из json файла. Редактирование происходит с очисткой ранее загруженных но не зарезервированных уникальных номеров.

Параметры:

doc_id - номер документа(Поставки или Комплектации)

doc_type - тип документа(PURCHASE_ORDER, PHYSICAL_SET_ORDER)

Пример вызова:

{
	"items": [
		{
			"variantId" : "1036",
			"productId" : "2bc478a4-9d3d-f9bd-339b-024e4cbf053c",
			"stickerTemplateCode" : "testTemplate2",
			"stickerContentData" : "{        \"blocks\": [          {            \"name\": \"block1\",            \"value\": \"Состав: - 54% шерсть, 40% полиэстер, 5% другие нити, 1% эластан /nПодкладка - 100% полиэстер\"          },          {            \"name\": \"block2\",            \"value\": \"Рекомендации по уходу /n- Не стирать /n- Не отбеливать /n- Не сушить в стиральной машине /n- Гладить при средней температуре /n- Бережная профессиональная химчистка\"          },          {            \"name\": \"block_img\",            \"value\": \"https://asset1.marksandspencer.com/is/image/mands/SD_03_T15_1436T_XB_X_EC_1?$PRODVIEWER_SUB$\"          }          ]      }",
			"stickering" : false,
			"stickeringWithUnigueNumber" : false,
            "uniqueNumbers" : [
		{
			"uniqueNumber" : "898789891",
			"type" : "UIT"
		}
		
	]
		}
	]
}

Пример ответа:

{
    "c": "01de612f-209c-bbbb-167c-fc6f2e7649c0",
    "orderId": "1016",
    "success": true
}
Создание редактирование задание на стикерование через excel

/api/lite/sticker/task/excel или /api/lite/sticker/task/{sticker_task_id}/excel

Данный метод предназначен для загрузки или редактирования задания на стикерование из файла эксель(formData). Редактирование происходит с очисткой ранее загруженных но не зарезервированных уникальных номеров.

Параметры:

doc_id - номер документа(Поставки или Комплектации)

doc_type - тип документа(PURCHASE_ORDER, PHYSICAL_SET_ORDER)

upFile - файл excel в formData

Пример вызова :

{ 
  "fileName" : "chestnyznak.xls",	  
  "content" : "0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAA......" - base64
}

Пример ответа:

{
    "c": "01de612f-209c-bbbb-167c-fc6f2e7649c0",
    "orderId": "1016",
    "success": true
}

Файл эксель:

1. уникальные номера(второй лист):

imei.png

2. Строки задания на стикерования(первый лист):

задание на стикерование.png

 

Получение задания на стикерование

/api/lite/sticker/task

id(не обязательный) - номер задания на стикерование

parent_doc_id - номер Поставки или Комплектации

doc_type - тип документа(PURCHASE_ORDER, PHYSICAL_SET_ORDER)

Необходимо передать либо id, либо parent_doc_id и doc_type. Если не заполнить данные параметры то возвратится ошибка что документ не найден.

Пример ответа:

{
	"id": "1037"
	"parentDocument": "1022"
    "items": [
    	{
        	"variantId": "1025",
            "productId": "af25e75b-412e-4a0c-9662-4db575bf6df3",
            "num": 1,
            "stickerTemplateName": "testTemplate",
            "stickerContentData" : "{        \"blocks\": [          {            \"name\": \"block1\",            \"value\": \"Состав: - 54% шерсть, 40% полиэстер, 5% другие нити, 1% эластан /nПодкладка - 100% полиэстер\"          },          {            \"name\": \"block2\",            \"value\": \"Рекомендации по уходу /n- Не стирать /n- Не отбеливать /n- Не сушить в стиральной машине /n- Гладить при средней температуре /n- Бережная профессиональная химчистка\"          },          {            \"name\": \"block_img\",            \"value\": \"https://asset1.marksandspencer.com/is/image/mands/SD_03_T15_1436T_XB_X_EC_1?$PRODVIEWER_SUB$\"          }          ]      }",
            "stickering": true,
            "stickeringWithUnigueNumber": true
        }
    ]
}
Получение списка типов документов в Кактусе

/api/lite/sticker/task/document_types

Пример ответа:

[
    "ORDER",
    "PURCHASE_ORDER",
    "SKU_QTY_CORRECTION",
    "INTER_MOVEMENT",
    "PURCHASE_RETURN",
    "ORDER_RETURN",
    "TAKE_IN_PLAN",
    "TAKE_IN_FACT",
    "TAKE_OUT_PLAN",
    "TAKE_OUT_FACT",
    "TAKE_OUT_PACKING",
    "TAKE_OUT_PALLET",
    "COD_IMPORT",
    "COD_DOC",
    "COD_PAYMENT_DOC",
    "DELIVERY_PLAN",
    "DELIVERY_BILL_IMPORT",
    "DELIVERY_BILL_DOC",
    "WAREHOUSE_BILL_IMPORT",
    "WAREHOUSE_BILL_DOC",
    "CONFIRMATION",
    "RTU",
    "PTU",
    "STORNO_RTU",
    "PRICE_DOC",
    "RESERVE_DOC",
    "TAKE_OUT_LIST",
    "GATHER_REQUEST",
    "PAYMENT",
    "FORCED_BALANCE_PAYMENT",
    "ORDER_EXPENSE_PAYMENT_DOC",
    "ORDER_PAYMENT_DOC_FACT",
    "CUSTOMER_ORDER_PAYMENT_DOC_PLAN",
    "CUSTOMER_ORDER_PAYMENT_DOC_FACT",
    "CUSTOMER_ORDER_FULL_PAYMENT_DOC",
    "CLIENT_BILL",
    "CONDITION_MOVEMENT",
    "PHYSICAL_SET_ORDER",
    "BILLING_DOC",
    "STICKER_TASK"
]
Получение всех чз

/products/all/unique_numbers/excel

Пример отчета:

{
    "success": true,
    "url": "https://storage.yandexcloud.net/feed-cactus/un_test@test.ru_06.03.2024_12-00-44.xls"
}

Инструменты администратора

Инструменты администратора

Настройки интеграций с магазинами и маркетплейсами

Реализован http сервис для работы с магазинами и маркетплейсами. Добавлен следующий функционал:

1. Получение одного магазина. Метод GET /api/lite/settings/eshop?id=sdjkcjnsd-njkw398njk-njskdcbj. Получаем вот такую JSON:

{
     "shops":[
                 {
                     "active":false,
                     "additional_params_dictionary":"",
                     "apiPassword":"AgAAAAA2xaMuAAXwby5dKO5av0XslPGLxdkzUAA",
                     "apiToken":"FF000001AC70ED29",
                     "apiUrl":"https://app.kak2c.ru/api/beru/588589",
                     "autoSkuImportInterval":24,
                     "bitrixCatalogId":"e4a1920d-f154-7284-bad4-a7b9546032fe",
                     "bitrixCatalogName":"Каталог товаров KAK2C7",
                     "confirmationType":"SELF_CONFIRM",
                     "default":false,
                     "defaultVat":"NO_VAT",
                     "deliveryInfoID":"42fe7049-6c47-2bca-e690-c49267060e9f",
                     "eshopOfferIdType":"EXT_ID",
                     "extId":"21584150",
                     "id":"e4a1920d-f154-7284-bad4-a7b9546032fe",
                     "isActive":false,
                     "isDefault":false,
                     "isOrdersEnabled":false,
                     "name":"Bro Cosmetics",
                     "needAutoSkuImport":false,
                     "needCodConfirmation":true,
                     "needCopyOrderNumber":true,
                     "needExportStatuses":false,
                     "needPrepayConfirmation":false,
                     "needReserve":true,
                     "needRestsControl":true,
                     "ordersImportInterval":1,
                     "percentStock":100,
                     "prevPriceTypeID":"805a5315-4d39-523a-6d79-e90fcc056abd",
                     "priceTypeID":"35578ac2-7949-8b3f-cbd0-19cdb82a2046",
                     "pricesRestsExportInterval":1,
                     "reserveType":"ON_IMPORT",
                     "syncOrdersToEshopMode":"NO_SYNC",
                     "tenantOrganizationID":"ad68f1b6-8975-1179-9fe6-df8bbb6333f2",
                     "type":"BERU",
                     "warehouseID":"6805bc64-270f-ae7d-1231-773ff181e446"
               }
    ],
    "success":true
}

При этом нужно учесть что для tenantOrganization вместо объекта возвращается его id в поле tenantOrganizationID. То же сделано для warehouse-warehouseID, deliveryInfo-deliveryInfoID, prevPriceType-prevPriceTypeID и priceType-priceTypeID. Соответственно на фронте нужно получить эти объекты из базы по id.

2. Получения списка магазинов. Метода GET /api/lite/settings/eshop. Получаем файл аналогичный предыдущему, но вместо одного магазина в файле все магазины данного клиента.

3. Изменение и добавление магазина реализовано одной операцией. Метод POST /api/lite/settings/eshop. В теле метода передаем json:

{
                     "active":false,
                     "additional_params_dictionary":"",
                     "apiPassword":"AgAAAAA2xaMuAAXwby5dKO5av0XslPGLxdkzUAA",
                     "apiToken":"FF000001AC70ED29",
                     "apiUrl":"https://app.kak2c.ru/api/beru/588589",
                     "autoSkuImportInterval":24,
                     "bitrixCatalogId":"e4a1920d-f154-7284-bad4-a7b9546032fe",
                     "bitrixCatalogName":"Каталог товаров KAK2C7",
                     "confirmationType":"SELF_CONFIRM",
                     "default":false,
                     "defaultVat":"NO_VAT",
                     "deliveryInfoID":"42fe7049-6c47-2bca-e690-c49267060e9f",
                     "eshopOfferIdType":"EXT_ID",
                     "extId":"21584150",
                     "id":"e4a1920d-f154-7284-bad4-a7b9546032fe",
                     "isActive":false,
                     "isDefault":false,
                     "isOrdersEnabled":false,
                     "name":"Bro Cosmetics",
                     "needAutoSkuImport":false,
                     "needCodConfirmation":true,
                     "needCopyOrderNumber":true,
                     "needExportStatuses":false,
                     "needPrepayConfirmation":false,
                     "needReserve":true,
                     "needRestsControl":true,
                     "ordersImportInterval":1,
                     "percentStock":100,
                     "prevPriceTypeID":"805a5315-4d39-523a-6d79-e90fcc056abd",
                     "priceTypeID":"35578ac2-7949-8b3f-cbd0-19cdb82a2046",
                     "pricesRestsExportInterval":1,
                     "reserveType":"ON_IMPORT",
                     "syncOrdersToEshopMode":"NO_SYNC",
                     "tenantOrganizationID":"ad68f1b6-8975-1179-9fe6-df8bbb6333f2",
                     "type":"BERU",
                     "warehouseID":"6805bc64-270f-ae7d-1231-773ff181e446"
               }

изменение происходит если заполнен id, добавление при пустом id. Также нужно учесть что нужно передать tenantOrganizationID, warehouseID, eliveryInfoID, revPriceTypeID и priceTypeID.

4. Удаление магазина. Метод DELETE /api/lite/settings/eshop?id=sdjkcjnsd-njkw398njk-njskdcbj. Удаляет магазин из базы.

Инструменты администратора

/api/lite/admin/settings/delivery-info - информация о доставке

1. Получения списка deliveryInfo. Метода GET /api/lite/admin/settings/delivery-info.

2. Изменение и добавление deliveryInfo реализовано одной операцией. Метод POST /api/lite/admin/settings/delivery-info. В теле метода передаем json:

{
            "active": true,
            "adAttachments": [],
            "aggregatorDeliveryCompany": "GOODS",
            "courierTitle": "СберМегаМаркет",
            "default": false,
            "deliveryAggregator": "TEMPOLINE",
            "externalKey": "GOODS",
            "gatherRequestSettings": {
                "currency": "RUB",
                "cutOffTime": [
                    12,
                    0
                ],
                "documentID": "0e451286-9ce5-dec0-6d74-fc54575e3360",
                "isExported": false,
                "isIntegrationError": false,
                "isSynchronized": false,
                "printStatus": "",
                "timetableNonFriday": false,
                "timetableNonMonday": false,
                "timetableNonSaturday": false,
                "timetableNonSunday": false,
                "timetableNonThursday": false,
                "timetableNonTuesday": false,
                "timetableNonWednesday": false,
                "uid": "0e451286-9ce5-dec0-6d74-fc54575e3360"
            },
            "insurancePercentage": 100.0,
            "isActive": true,
            "isDefault": false,
            "isPublicAvailable": false,
            "marketplace": true,
            "name": "GOODS",
            "russianPost": false,
            "type": "AGGREGATOR_CONTRACT",
            "uid": "094c7b63-d157-33f5-e1e7-7b3ca34b3073",
            "warehouseComments": []
        }
изменение происходит если заполнен id.
3. Удаление deliveryInfo. Метод DELETE /api/lite/admin/settings/delivery-info?id=sdjkcjnsd-njkw398njk-njskdcbj. Удаляет deliveryInfo из базы.
Инструменты администратора

/api/lite/admin/settings/payment-method - информация о способе оплаты

1. Получения списка способов оплаты. Метода GET /api/lite/admin/settings/payment-method.

2. Изменение и добавление способов оплаты реализовано одной операцией. Метод POST /api/lite/admin/settings/payment-method. В теле метода передаем json:

{
            "code": "no-cod",
            "name": "Без наложенного платежа",
            "paymentMethod": "NO_COD",
            "uid": "68150888-7670-b46e-8ab9-ce42bb6f4255"
        }
изменение происходит если заполнен id.
3. Удаление способа оплаты. Метод DELETE /api/lite/admin/settings/payment-method?id=s21kcjnsd-4jkw435njk-66skdcb1. Удаляет способ оплаты из базы.
Инструменты администратора

/api/lite/admin/settings/checkout - настройки чекаута

1. Получения списка checkoutSettings. Метода GET /api/lite/admin/settings/checkout .

2. Изменение и добавление checkoutSettingsреализовано одной операцией. Метод POST /api/lite/admin/settings/checkout. В теле метода передаем json:

 {
            "commercialAccount": true,
            "defaultCity": "",
            "defaultDeliveryServiceOptions": {},
            "deliveryPremiumType": "PERCENT",
            "deliveryRegionSettings": {
                "commonSettings": {
                    "ALL": {
                        "ALL_REGIONS": {
                            "enabled": true,
                            "extraFeeFixValue": 0,
                            "extraFeePercentValue": 0.00,
                            "tariffEnabled": true
                        }
                    }
                }
            },
            "disableCodSumInTariff": true,
            "freeDeliveryAmount": 1.00,
            "freeDeliveryRegion": "RU_SNG",
            "insurancePercent": 100.00,
            "onlySufficientOffers": false,
            "orderSubtype": "KAK2C_SUBSCRIPTION",
            "paymentAccountId": "306b29d8-6f97-810e-eb71-046b6e37d7df",
            "paymentMethodCodes": "online",
            "paymentMethodCodesList": [
                "online"
            ],
            "paymentProvider": "YANDEX",
            "realUiRequiredFields": [
                "PHONE",
                "EMAIL"
            ],
            "trustToken": "322322",
            "uiRequiredFields": "PHONE;EMAIL",
            "uid": "245b5b14-1dd1-7dcd-7917-8b7d5aee510e"
        }
изменение происходит если заполнен id.
3. Удаление checkoutSettings. Метод DELETE /api/lite/admin/settings/checkout?id=888kcjnsd-88kw398njk-8jskdc88. Удаляет deliveryInfo из базы.
Инструменты администратора

/api/lite/admin/settings/lite - настройки lite

1. Получения списка liteSettings. Метода GET /api/lite/admin/settings/lite.

2. Изменение и добавление liteSettingsреализовано одной операцией. Метод POST /api/lite/admin/settings/lite. В теле метода передаем json:

 {
            "businessTariff": false,
            "clientNumber": "6750043",
            "defaultReserveOrders": true,
            "displayFinance": true,
            "menuCatalog": {
                "humanId": "1000",
                "items": [
                    {
                        "collectionId": "1001",
                        "title": "Все товары"
                    }
                ],
                "name": "Каталог",
                "uid": "e811675e-df74-e1ba-dfc7-b734f02576ef"
            },
            "needApiProductsReturnDetails": false,
            "orderEmailFooter": "PHAgc3R5bGU9ImxpbmUtaGVpZ2h0OiAxLjQ7Ij48c3Ryb25nPtCV0YHRgtGMINCy0L7Qv9GA0L7RgdGLINC/0L4g0LfQsNC60LDQt9GDPyDQodCy0Y/QttC40YLQtdGB0Ywg0YEg0LzQsNCz0LDQt9C40L3QvtC8Ojwvc3Ryb25nPjwvcD48cCBzdHlsZT0ibGluZS1oZWlnaHQ6IDEuNTsiPndoYXRzYXBwOiZuYnNwOzxzcGFuIHN0eWxlPSJmb250LXNpemU6IDE0cHg7Ij44KDk1PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsiPjMpNzAzLTA2LTIzPC9zcGFuPjwvc3Bhbj48YnI+ZS1tYWlsOiZuYnNwOzxzcGFuIHN0eWxlPSJiYWNrZ3JvdW5kLWltYWdlOiBpbml0aWFsOyBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBpbml0aWFsOyBiYWNrZ3JvdW5kLXNpemU6IGluaXRpYWw7IGJhY2tncm91bmQtcmVwZWF0OiBpbml0aWFsOyBiYWNrZ3JvdW5kLWF0dGFjaG1lbnQ6IGluaXRpYWw7IGJhY2tncm91bmQtb3JpZ2luOiBpbml0aWFsOyBiYWNrZ3JvdW5kLWNsaXA6IGluaXRpYWw7IGZvbnQtc2l6ZTogMTRweDsiPnBvZHBpc2thQGNvbmRlbmFzdC5ydTwvc3Bhbj48YnI+0YLQtdC70LXRhNC+0L06IDxzcGFuIHN0eWxlPSJmb250LXNpemU6IDE0cHg7Ij44KDQ5NSk3NDUtNTUtNjUmbmJzcDs8L3NwYW4+PC9wPg==",
            "orderEmailHeader": "PGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PGltZyBzcmM9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFCODBBQUFHZUNBWUFBQUFlNnBBSEFBQUFDWEJJV1hNQUFDNGpBQUF1SXdGNHBUOTJBQUFBR1hSRldIUlRiMlowZDJGeVpRQkJaRzlpWlNCSmJXRm5aVkpsWVdSNWNjbGxQQUFBZGFoSlJFRlVlTnJzM2UxVkcwbmFNT0FTWi83ak53SzBFY0JFZ0NZQ3ZCR2dpY0NlQ0N4SE1EZ0N5eEVNam1CRUJJc2pXQkhCQXhId2RnMmxIZG1EaENUNm82cjd1czdSWWRjZVExUGQ5WGxYM1QxNmZId01BQUFBd0RDTlJxTTMxWmVyNmpOL2ZIeGNLQkVBQUFBR056Y1dOQWNBQUlCaFNnSHpSZlU1Zlh4OEhDa1JBQUFBaHVoSUVRQUFBTUR3akVhanM1QUM1a29EQUFDQUlmdEpFUUFBQU1Dd3JBWE1qOU1mM1NrVkFBQUFoc3BKY3dBQUFCaVEwV2owTm53Zk1JK1dTZ1lBQUlDaEVqUUhBQUNBZ1JpTlJ0UHF5eC9oKzRCNWRLOTBBQUFBR0NwQmN3QUFBQmlBMFdoMFZYMzV2T0d2YjVVUUFBQUFRK1dkNWdBQUFOQnpvOUZvWG4yNVZCSUFBQUR3VDRMbUFBQUEwRk9qMGVoTjllVzYrcHkvOEo4dWxCWUFBQUJESldnT0FBQUFQWlFDNW92cWM2bzBBQUFBWURQdk5BY0FBSUNlR1kxR1o5V1haZGc5WUw1VWFnQUFBQXgySHYzNCtLZ1VBQUFBb0M4VC9hZUErYUw2SE8vNmJ4NGZIMGRLRGdBQWdLRnkwaHdBQUFCNllqUWFUYXN2L3dsN0JNd3JEMG9PQUFDQUlSTTBCd0FBZ0I0WWpVYnZxeStmRC9pbnQwb1BBQUNBSWZ0SkVRQUFBRURaUnFQUnZQcHlxU1FBQUFCZ2YwNmFBd0FBUUtGR285R2JHZ0xtQ3lVSkFBREFrRGxwRGdBQUFBV0tBZlB3RlBBK1ZSb0FBQUJ3T0NmTkFRQUFvRENqMGVnczFCY3c5MDV6QUFBQUJzMUpjd0FBQUNqSVdzRDh1S1p2ZWE5VUFRQUFHREluelFFQUFLQVFvOUhvYmFnM1lCNEptZ01BQUREcytmYmo0Nk5TQUFBQWdOd244S1BSdFByeXVlN3YrL2o0T0ZLNkFBQUFESm1UNWdBQUFKQzUwV2gwRlJvSW1BTUFBQURlYVE0QUFBQlpHNDFHOCtyTFpVUGYva1lKQXdBQU1IU0M1Z0FBQUpDaDBXajBwdnB5WFgzT2xRWUFBQUEwUjlBY0FBQUFNcE1DNW92cWM5cndqN3BWMmdBQUFBeWRkNW9EQUFCQVJrYWowVmw0Q21hZnR2RGpKa29jQUFDQXdjL0ZIeDhmbFFJQUFBRGtNRWwvQ3BndnFzOXhpei8yWDQrUGowdWxEd0FBd0ZBNWFRNEFBQUFaR0kxRzArckxmMEs3QWZQb3JkSUhBQUJneUFUTkFRQUFvR01wWVA2NW94OC9kUWNBQUFBWTlMeGNlbllBQUFEb2NHSStHczJyTDVjZFg0WVU3UUFBQUF5V2srWUFBQURRZ2RGbzlDYVRnSGtrUlRzQUFBRERuYU03YVE0QUFBQXRUOFpIb3pmVmwwWDFPYzNra3I0OVBqNmV1VE1BQUFBTWtaUG1BQUFBMEtMUmFEUU9lUVhNbzlOMFhRQUFBREE0Z3VZQUFBRFFrdEZvRkU5ejM0YThBdVlyVTNjSUFBQ0FJUkkwQndBQWdCYU1ScVA0M3ZCRjlUbk85QktuN2hJQUFBQkRKR2dPQUFBQURSdU5SdFBxeXg4aDM0QjVkSkpPd2dNQUFNQ2dDSm9EQUFCQWcwYWowYXo2OHJtUXk1MjZZd0FBQUF4dTd2NzQrS2dVQUFBQW9JbEo5Mmcwcjc1Y0ZuVEpkNCtQajJOM0RnQUFnQ0Z4MGh3QUFBQnFOaHFOM2xTZlJTZ3JZQjVKMFE0QUFNRGcvS1FJQUFBQW9ENHhZRjU5V1ZTZjA0SXUreUZkYy93czNVVUFBQUNHUk5BY0FBQUFhcEpPYVY5WG41UE1ML1d1K3R5R0ZDaC9mSHk4ZGZjQUFBQVlLa0Z6QUFBQXFFRUttQytxejNHR2wzY1gvajVKSG9Qa1MzY01BQUFBbmdpYUF3QUF3Q3VOUnFOcDllVnpScGNrU0E0QUFBQTdFalFIQUFDQVY4Z2tZQzVJRGdBQUFBY1NOQWNBQUlBRGpVYWplZlhsc29NZkxVZ09BQUFBTlJFMEJ3QUFnRDJOUnFNMzFaZXIwRjdBWEpBY0FBQUFHaUpvRGdBQUFIdElBZk5GOVRsdDhNY0lrZ01BQUVCTEJNMEJBQUJnUjZQUmFGeDl1UTcxQjh3RnlRRUFBS0FqZ3VZQUFBQ3dnOUZvZEJhZWd0ckhOWHc3UVhJQUFBREloS0E1QUFBQXZHQTBHcjJ0dnN6RDRRRnpRWElBQUFESWxLQTVBQUFBYkRFYWphYlZsODk3L2pOQmNnQUFBQ2lFb0RrQUFBQnNNQnFOWnRXWER6djhwNExrQUFBQVVDaEJjd0FBQUhqR2FEU2FWMTh1Ti95MUlEa0FBQUQwaEtBNUFBQUF2RXlRSEFBQUFIcHFWRTMwbFFJQUFBRDhPR0VlamQ1VVh5YlY1MWFRSEFBQUFIcThCaUJvRGdBQUFBQUFBTUJRSFNrQ0FBQUFBQUFBQUlaSzBCd0FBQUFBQUFDQXdSSTBCd0FBQUFBQUFHQ3dCTTBCQUFBQUFBQUFHQ3hCY3dBQUFBQUFBQUFHUzlBY0FBQUFBQUFBZ01FU05BY0FBQUFBQUFCZ3NBVE5BUUFBQUFBQUFCZ3NRWE1BQUFBQUFBQUFCa3ZRSEFBQUFBQUFBSURCRWpRSEFBQUFBQUFBWUxBRXpRRUFBQUFBQUFBWUxFRnpBQUFBQUFBQUFBWkwwQndBQUFBQUFBQ0F3UkkwQndBQUFBQUFBR0N3Qk0wQkFBQUFBQUFBR0N4QmN3QUFBQUFBQUFBRzZ5ZEZBQUFBQUFBQWh4bU5SdFBxeXpqKzc4Zkh4NWtTQVlBQysvT3FFMWNLQUFBQUFBQ3dwOUZvOUtiNnNxdyt4K21QL3YzNCtIaXRaQUNnTE5LekF3QUFBQURBWWQ2R3Z3UG0wWHRGQWdEbGNkSzhpMElmamNZaHBldFpzLzVueS9SWldWYjNhYW5rWU9jNkZuZjRudjN3eCt0L2RsOTlibi80ZS9VTUFBQUFnTDJNUnFPNHhuVDZ3eC8veXpvVEFCVFdwd3VhTnpKUWlvRzVjWGdLMEkzVDU4MHpnNmQ5M1lXbllQcnQ2bFBkdjFzbHprRHIyV1N0ZnAyRnY0UGl4elY4KzIvaDc4RDZjcTIrM1N0NUFBQUFBS0swRHZ5ZlovN3F5K1BqNDFRSndYZUhDQ2ZwajFaZjQ1K2Q3UEd0YnRMWHVGWWIxMmtYb2VDRFVGVzV4S3dVczVEV3M2dmZZK1JwZ1k3cnBhQjVMUU9qMk1pZnBjOXB5NWZ3a0RxSCtMbTJneEgxclBINmRydFc1d1RTQVFBQUFBWnFOQnJOcXkrWHoveFZYRU1hV3pkaWdIVmlISjdXYnlmcDYza0xQM1k5UnJMSS9hQmhWVWJUOEJRcy8yN0RnS0E1WkZBL0JjMzNidEFtcWNHZnROVGc3eXVlUnIrdVB2UFNUcUdubE5xeHczaVRPb21aSjI2dzlleHNyWjdGejNIR2wvdHRiVUIyN2U0QkFBQUE5RjlheTF5R3pldFd2ejArUGw0cEtRWlFGeWJWbDdmaGFSMzNOSU5MaWpHU1JYZzZaSGlkV1RsZGJTb2pRWFBJb0o0S21yL1lrSTFUWTc5cTlJOEx1dnk3MUFqUGM5L1ZXSlh6clByeWZyMThkUktEcTJ0djErclpTY0cveXRmd3RISGwybTdpN0orNTJENmVLWW1kTEllV1ZxNTZQaFk5L0xYZTU3eWhMbTJZc3FEVXZGVWF1MDEvdHBTNUNQV1JIRlJ0MFVRcGFHLzRoN2krTXgvUTh4SG5JTDJiaDJqZmV2ZU1mdDd5bjl4VjkzdXNwT2pwOHo5SmJYUmN6ODA1WnJJNlpIalYxVnczbGRVc3ZIQUlzMi94a0w3MjQvUzhiUk0wZjdZeWoxTmpIeXYwYVU5K3JTOXBjclhJc09HTUhjWkozenNKbnIzL3EwQjU3b09yUXdtZzUvMzhMVUtlR1VOeU5hZ2Q4dFh6MGNjQjBpKzVqUU9lbVVUK3FhcGw1Y2YzeGYzMU5lZm5DUFdSL2pBZjFON3dyRUdsZTA0SExENW8zOGo0R1kzajQ1Zldqdjh0TXlFOWV1WlhtV0xqNGJjU0R6M0Z0ZHFydHVhMEtjNFUxOUl1aHRnLzlMVWZwOTkrVWdUZk5maHZVNE4vMnNOZk1iNWI1N0w2UGVQaTU2enJ4YzVkZDFmUnk3cDJsZ1pYOFhQYzgxLzNJbjArVjc5M0hKVE5UWlFvMkt4NmpxK2RRSVZCT2YvaDY2b3ZqMS9pb3YxdCtzUjI0Vll3SFFBYUYrZlE4L0MwZmdWMEtLMXY3YktHSE5lYXJRVlIrdk0rRGs5citaY04vNmo0R3N6MWpXRnZRcjJ4bXIvV2FwdU9rYlJZWGtETkJoODBYMHNqMGxhRHYycUlsK216N2o1OXhqLzgrU1I5UFV0Lzk1cU9JaTU2L3RsVjhIemYzVlgwcXE1TlF6dWJVcjZ0MWFWZDB4Q1AxK3BkVXhzNVZvT3ltQkpvSHA0QzZFdFBCZ1ZaTGRCTkZBV1Eyb1R6OVg0ekJkUHZ3dC9COUlWQU9nRFVQN2VNV2R0c3lJYk92ZC94dnp1UDY2SFdnQ2hSamNIZjFhYnJPRC84MzVydElmUEZGTStKVnJHU3MvVFo1M0RXS2tZU0R6bTlyNnQrcG9PWjc4TVByNkVGQ21yM2hwaWV2WVUwSXQ5U0IvRFhnbUVUN3c5Tm5VUHNEQ2JoZGU5YXZ3a3R2T00wbFhuc1lOL3QrbStrcStyTndHcmEwRURodTBYNVVPTTdXTlB6ZXZiRHA0bGdmNWF2VFJqUTg3a0lzbDBjWWhDcDVhUm43NlRNNDNoR2V0WitXbzJOLy9wNFpVa1JiYUQ2U09mTUI3VTNiRFdJTk8zU3M1UHhzeG5YalpaaDk3V3VUOVY5ZjYva0tPd1pqd2ZmRGcyV3R6NEhUTmtmSnVteno0RzkyS2ZHbE8yekd2cXNWNjJCUzg4T0dUeTNRd3FhcHdCZWJMaW1vZjRBM3VyZHhZc3VkZzZtaWVicTNkQ0hiQVNJd2J2M1RYUmdoM1lZSmhIRjE3VlpxRCtEUTJmMUxBMFdWL1ZzRXVyZGNKUEZheE1HK0p6R3dmOVpROTkrdk9VWnVRdGx2dmRwZlRJeGhBVzZKdXZqdGgzUU53MyszTVkzeWRVd3diMXE4RWZVbmRhdFRqY3QvWnh4SnUzUGFnSGxXdCtuUG1iWXg5ME8rTlpudFpuUWZGQjcwOEp6L1JES1BnWFcreUJjeWxnMzdhQXZhclEvcU83YlJPM3Z4YlA1MlR5YW5qN2ZzVytaSGRCSGRob2YyVkJQNHpydXJnSDBPRStkN3J0dWtuN09ySTY1dHFCNTcrZDZaeUhQc1dkY3ErNjZ6bVl6RngxRTBMekJBRjVjNEp5SHB3Vy8rNHgrMzFYdy9QS0FoaU11cU05cjdKZ083akFza3FoclB3eTRjcXRuc1pON24rcGFYWjFkN0tCbWRkVkJzaDBVL2hLZUZnWlBDLzRWdjFiUHFmY29IdjU4TERZTkJ2VjlqWmI3SkdSNmtxMkwrNTc2c2JoWVBFNmZTZWdtcUI3SG40c2MrM29HV1I5dmhoeklTTzNDZGNoa2M1OCtrWnFlNjIyTFhyK0U4ays1LzJJRFdpTjkwWTNBTmk4OFA3Y0h6T2wvdGQ1REFXUEJ1RjYxVC9BcSs5ZFFIckJlL1Z2MXUxenQ4SDBuNlhldmJld3NhTjZvenR2Z2pMT2Vmbnh0cG9VYXlpYld1WGM1Rk1aUnp4djZjZldKRmVHL29iNGdYbHpZaTZleS94VUgwTEdpNWJhNEY5UG1WcDlwdk1iNHdLZHIza1VNL0gyT2xUZDFKZ2RQUEZJRDhEbVVmWnFTN3VyYVEzcDJZejE3bTJrOWk2OWVpTHNQWThEaDF6UklmSzJUVkFkdjE5N1BRejlOQzcvK0M4OG9sQzMxWTR2VXg4N1N1SGFjSnVtL3BINzQ2eDdqeUVQRjhlZEZHamYrWDlXMlhNZU5seW5EQzlCeXV4Q2VUai9jS0EwRzhzd3ZxaStmQ3Y4MTV1NGt0Q3NGRmcvWkJEOVRlbVQ4WE1lRFFiRmYzRFdnRjlkQmYwMXp5Rm11QWZQVTN5L1hZaVZmZHZnbnY2ZDU2WnNOWmJXS2ZjU05WMklmWmZobzAxTDI0L0xZQm4zTjRWcDZHVFJ2TUZnZUZ3L0hLVkMyTE9CQlc2WWRJdU93WC9BOGRvNjM2Y1Q2dnVWK25Ub003d2tleG9EcVRkb0ZWSGV3UFBzQjF3OTFMUVljWWoyTFFZWTZGaG5qNU92UHRJRmw0a25yNVVEZ05qM3JKWnNMYWtGdjI2aEY2b2ZmcHMxaFAxZWYzOEpUdXJxbUNhQkR0L1gvUHAydS9LSTBHSWhacUdjRGRGZE8waWt1b0QzdlgxRmZKNHFQbktTMTNiaWUvM3ZZTFpQbWVyQjhYdGc0ZHhVOC8zbUh1VzJjbHk3U0pwbFZXWWw5bE9scjE2ZW8yZGswdExQdXRGV3ZndWFwa1k4Vm9NNWdlVWdMQnFzZ1huRXBJOVBDUnl5WGNkZzlTQk03eVQvaTVvT1hGaXAvQ0p4ZXFOdURHVlRGWjJvWjZrdWI4YkhrZXBicTJpSXRNdFoxOGp3T3dQNU05WERzcWV1WDFDNlhmSklyN3FZMTZJUmh0RmZ4VlBwVjlZa0xCbkYzZnRzQjlHWHFDeWZ1QnJSVzc2ZWgvQTErc011ekh1ZWVwYjkyNk1QNm9qN1FuTFJHK3BvMjQ3MVNKS1BuT2ZZZHQySDM5Znc0Tmp3ci9jUnVtdCtlN1REV2pZZWFZdUQ4N2RvQlRiR1Bzc1QxK2FsaUtHcGNIdS9YUTVmWDBadWdlVW9oc2d6MXZpTWhMZ2Ira2s2VzMvZmhvVXRCbXJqWXVXdWc1akw4c0t2cWgzS2ZoWG9EcCtSZjEySUttbFZkcStOZDN2RlovRmZKd2ZKbjZsb2NTTzB5K0FwNzFNTmJKd2g2cWZPQndDdTlzMEFIZzV2RUxIOElvSDhLN2FSd2ozMWgzRWkyZFBvY1dxdnZjZXo1cTVKZ0FNOTZMN0pBdVpQUWlyZmhkV3RoRnc1RmtJT1VZWFlSZGtzdkhtTWtQL2RwN1hadHJCdFBuZCs5TUJmOUk5UjdRSk1XMit3K1BiTURHcGQzdXNHcytLQjVDdURGZ3R3MWhjaXU0bnNPenRJN3J2cjI0QzNYVHNQdXNzaTUybFUxV1N2M2FjMkJVL0t2YTIvV1V0RFU4YjZXK096OWx0Nmh1dXhoUGJ0ZkczelZjUm92MXJNUEtWZ3c4VVQycHowTzVaL1ducnVUTU53MkxMNTNLcVZ3cnl2THlrdmlHR1Q5OVBuWW5ZQkc2L2s4Q0p3empHZDlGakpJQi9rS3Ara3dDZENzOTVsOER6aFlYTmNQVDRIZ1hkYjBZd2JlU1FwazliSC9qNzlYM0JCKzQ4bm9uZC82K3R3T1pBN2EyZXZDaWcyYXI2VUVqd0c4MHhxL2RRemsvVEtFOXh5c25ZYmRwVk9JbldnODNUT0w3MWtPVDR1Vko2cndZQVpUcTB3T2RhV2dpWXNSY1ZQSzFRRHFXZXljSnpVMjlDZXBMbDQ1WmRlYlorU3E4TUg1cVN3SVFCeFh4dmZhaGZhQzU2dlQ1LytWdWgxYW1UY0tuRE1FMDhLdmYyWXpHVFFuWlZtcll3MWExaVM2Zkk1algvZDV4Ly84WTE4eThMNHcxcjFQQnd5L2VFSjY0K3NRNGc0OUYrTlJkMTM4NENLRDVpbDlTQXhFMVowU1BBYnl4bjA4WGI2bFUxaWRPdDgxRlZrOFdYNnV6ZzVtSURWT215VHF6T1N3MnFHNEhGQTl1MC92aGF4enNURzJmN2VDQkwwUm40K1MwN1Ivc0VBSHBENnY3ZUI1dEVyZHZ0QXZRbk4xT3p5OWpnSDYvSnlYbnFZOXp0bm43aVEwT20rdnE2NitWWnkwYmMrQSthOURPRlQ0d3poZ0dtd1U3WU9INEQzbWZhaVA5MTMxbFVVRnpkZlNROGYwSVhXZmN2NlMwckhmRC9RaGpKM2dMNkhzb0EzMTFyZlY1cFE2TjBrTVlvZmlsbm8yRDAvcDJ1dXFaMDZkOStmWldBWnAyb0dlOVhrcGVQNnh4ZkhsZVJBOGh5YnJkZHp0N3dRT2ZYL080NWk4NURUdDUya3VEOVJ2V3VQM21pbE8yblJBd0h3KzFIbHNFRGd2bmZlWTk2YytkcktodFppZ2VWcjRpb1YwMGNDMy81SjJFZzM5SVZ5RXB6VFMzMVRKUVEraTR1YVVPRURZOWQwMnV4cmNEc1V0algyc1ozVUdFT0twODBWS0ZVYTV6MGJwYWRyUHZVY1JlS1p0aTMxLzIrK0lXd1hQcjJYQmdOcnI5RFI0NXlQOU55MzgrdWMyVlVPOVVzQ3h6ald5RTVzOGFmbjUzVFZnL21tb0FmTzE4Vzc4L1FYT3kvUnBTRm1rQjFJZloyM1BQNHNJbXFkM3BjWjNsemZ4RHUxZkJjeS9ld2hYQVQyQjgyRU9vdUtpZG53R0xodW9aM01sL0k5NlZtZmdQTDVYYXlGb1dieHBLRHZqeDh3Q0hmQk12N2Q2SGRCdkxiZHhjYlB0ZjJWa2dkcTlOVjlrQVBPMTN3citGYVJwaDJibTZuV3pma1BqMGxydnJnSHptNVJaeUZqZ2FSMzdOeVZSbFBoNnVKbGk2RzBmM05wYVV0WkI4M1RpZFJHZTNxUGRoRThDZWM5MkNqRjl4U1JZQ0JuYUlDbzJQdjhKOVc5T0VUQi92cDQxRVRpUGl5Ty94MHdCZ2dQRlBoZkxVUGJKRmd0MHdMWTJMbWJVT090Z2pCa3pzaXpUV0Flb1o3NDREVjd0UmYvN3JKS3pLbHc0eFFyMVNKbUx6aHVxcDJNbFRNUFA3bUxIL3p5TzY3emU0NTlqQWZHUmNreWxaZTl0WFZ5R0ZqZEVaQnMwVDRQN1pVT0RrdWlMblZOYkgwU0I4MkVOb3VaaDkxMkgrL2dvWUw2MW5qVVJPSTlpcGdEcDJzdDlMcTZyTDE4TC9oVXV2RWNSMkRiWnFUNnhmMnI3dmNoeFU4L245TDV6L1NQVU00NmRLZ2w2YmhySzNoeGlNelhVNDMyaDN4dXV3KzZ2RlJCd1ZFZExKaTE3LytlZnJXMW96VEpvbnRJTC94bnFmVmZNdXE5U3N1LzBJQXFjOTF6SzV0QkVPdmJvaTNlWTcxVFBiaHNhZ0szU3RVK1VjcEZpSDJXQkR1aHoveGZidVM3ZUV4YzM1UDRudmY0SmVGMDlqZ3V4bjVRRVBYN0dsNkhzTko4blFacFNxR3QrM3RqM05uZW1DZkVWVmVGcGJYQVhOMmxjeHovSEFvdlEvb1p2OWlNdHUvNjRWdGtGemRPSjE5OGIvQkhmZ2gzeCszUU1BdWY5SFR6RlUxYkxQUVpRKzlZek8vRjJyMmV4M2Z2WXdMZU9HNC8rbEk2MjJMYTM1UHQyYk1BSzdOai8vUnk2MlNUMElXNGNkT29jWGwyUDQ1ai9Sa25RNDJlODlEVHQ3MnlraHNPbDlaVGpCbjlFL040eXRWSDNjeHVmcVhkNy9CTnJ1QytYajljUzVVdVdoT0dNeTVlaG1SaktkN0lKbWpkODRuWGxRU1U2NkdHODEzbjJjdkMwYUdqZy85YzdjTlN6dmV2WkxEUzNHUE01YlVpaXJHZWk5RFR0RnVpQVhkcTZwbDVWc291NGNkQ3BjM2k5YWJDUWlHYzhaMWR1SWJ5cS9qZk5XSlRhcE13Rjh6Myt5ZGMwSjJQem5QVmVQYzNXVjJuWkIxY2ZZMTFzOUlCdkZrSHpkTUlqUHR5bkRmK285enFCZ3gvR2VIK2tJdW5INENrTytQOEl6ZTJVbmFaZFArd3ZibVpvYWpIbVV1QzgyQW02Tk8xQTM4ZVpjWHcrRHQxbE52cVEzbld1dllMRDZ2QXl5T1pHLzUveFdjRy93cWtOWXJDL3F0N0U4ZWw1Q3ovcXhJWnphaFEzU2gzditkL3o4bGpnS3NqRW01c0hjNURCYXZTQWIrZEI4eFlENWw5VENraGU5ekE2UVZEMmdEL2V3ODhOMXpQdndEbDhBTlowU3U3TGxJcFdVTUF6MFphVElGTUpzSHQ3TnduZExVVEVCZEdsQlVzNHVBNTd2emw5ZjhaTFQ5UCtJUVVBZ2QyOTcrblBvcWZTWEdhZkxMNTNUdW1xcHdXYnlYUTcySEg1b3NtNVo2ZEI4N1dBK1hIRFA4cXVrM29lUnFsSXloNDR6YXN2djZ0bjJkZXpwbE55eHcxS1R0T1Y5MHlVdkFqOXdUdURnVDNHbXBQcWM5ZlJKY1E1eVo5cGt5R3d2MW1IOVJmYTBHUm1zRGJNM1VMWXk3VEZuM1ZoWXdzMXVHcjR2eC82ZkhVUlpPTE54VTNhME1pdzU1Nk5qTXM3QzVxbkZOR3hvVGx1NGNkNWozbDluVU5zakN5RUZDWUZ6QzhiL2pIdjFiTmFKMlpOTHNZSW5KYzVFQ2k1N1oyN2hjQ09ZODA0bHVnNktQRjdIRHZwSitHZytqdFZFbmpHczNWdVl4anNKcTFiSDdmOFk5VlBYdnZNN3B2SmQ2SGtEcXFuTXZIbWNSOHdMbS9rT2Vna2FKNGE4Yzh0RFQ2a2k2N2ZWQkVVTldpYWgrWUQ1amRlZjFCN296OXIrTWNJbkpmM1RKVGM5cDVhb0FQMmFQUGlPODRub2R2RmlFdjlKQnhVZnhkQm1uYjYvWXczblJtc2FUT25XV0VuWGN5L3A4YWVIQ0k5TjdNOS85bGRtbmV4M3poQUp0N3VmZkxza3VyalBEVHcrcVRXZytackFmTzJXS1N2LzJGY0ZENUpITktnS1RZY2wrcFprZldzamF3T0F1Zmx0YjBsTDBKYm9BUDJhZk51TXhoZnhIN3kxaXNtWVA4K1A4aE9ScjlOUTdtbnpPTGhGZWxNWVlzMGJ6M3ZxSDYrZFFjNFFKdzNuZXo1YndRZEQ1K3J4bjcwbTVMb3hFT3dhWUYvdG4rMWFqVm9YZzA2WXNmZlpzRDhZOVdJTFQwM2pUMk1VcEhrUGNpZmgzWUM1bC9zN2lxbjBYK0d3SGxaNHNDdzFFWG91QUF3ZHd1QlhhVmR3eDg3dm95VDFFOEtuTVB1ZFZlYWRqemplYnRJNjNQQTg3cmN1RGxUL0J6Z2tEN0pXbTY1N2NTZ3k5M3JZZmxoWEI3YnNsb1BtYlVXTkU4TFRmTVd5eXNHZE8yZWJlNWhYQ3JmZkZYMUxRNnlMMXY2Y1FiMHpkV3ptUHJ2cG9VZkpYQmV6alBSaC9jb1R0MUpZSTkyTDQ0enVzNXdkQndFem1IZnVydW92bnhSRXZSOHJsWnlCcjY1K1I5czFPV2M5YVNxbXhPM2dGMmxOWmFUQS83cFF1a1o2eGJtbTlmRHNzRXMxSGpBdDVXZ2VWcGdpZzNKY1lzRmRXWFhTZU9kUTN3WXBkM0xjN0Qwb2FVZjkwVTJoMVlhL1RiRXdMbUJSemtEODVMVHRGOVpvQVAyTk0xZ3pDbHdEdnVUbll3aDlFL1N0RU9QcERXMTQ0NHZ3d2xXOWpGVEJNYTZBeXB2K0ljVUI2NnRMV3c4YUo3ZUE3Tm9lY0RobEhtN2swVHlHdHkzK1FvRUE3UG1HLzNZZnQ2MDlPTXVVbHAveXBnVWxmcitKR25hZ1VNbVFEbU1PUVhPWWYrNmEzR0x2ai9qSmFjNXYzU2lGZjRoaHpIblJWcFBoNjFTRzM3SUtmUFZlaU92SHdmTWxFUXJ2bmhtZWFFK3huaHdMWWN0R2cyYXA1TmtNV1ZWMnp2MG5ESnY3MkdNamRWWEpaSEZRQ2t1NExhNVdjUXA4L2JNVy94Wmx5bTlQL2tQektjRi93cmVvd2djTXViTUljdUd3RG5zVjNmak9QWkdTYUIveW5ldUtRc1VQRW1CNnZOTUxzZW1NM1l4VlFTZGp3UGlXdnczSmRHNG1TS2dyVGF4NlpQbU1XQisybkxCT0dWdUlEZkVnWDJjNU1iSmVxdXZRRkR5clEzQTVxSGR0TFFmdkhlNmlPZml0dnJ5c2VCZlFacDJZTjkyTDQ0NWMxaVFFRGdIODBWWU53dmx2cnJ1UkIyRkxQdXJxZmt5MjZUbjQxSkphRHNHNEtPRGUreWlyb3k5alFYTnE0WTdCdFM2MkowM2Q4cTg5WWN4TmxvZmxVU25nNlRZSUxRWk1MOUpBVHZhMC9ZbWhTdkJnQ0xhMzFrb2QwZHJYS0NidVl2QW5uSlprRmdGenNkdUNidzRYb256aGk5S2doNC80NlZuZ2ZwZzdnZC95YWtleDdHbTdHeHM0L25JWnh5d01OWnRqQU95dE42WE54STBUeWNVMzNWVUtDcFJkK1YrcHhnNksvdTJNenJNRlh2cjJpN3pPRUc3dHJQWnhMNWg3N3hIRWRoSFptbHc5Wld3dTdqaDVVRXhvSDh5MzRRY3BiWHM0OHd1YStiT3NJV2d1Ykh1SU1yVkFWbjJISk12d3lzM3NkUWVOTy9ndmNycnZrclYwTm5EZUIra0l1bGlVQi9Mdk8xVVBBOHBYVGp0MTdHMmR5M0drOERYU2ovN1o2UDROTzN1SXJDbldjaG5RZUpVWHdrN2oyWDErUXloZnlyMU1NSHBhRFNhdVlVTTJEVERhenF4eVp6bnBFMjdGMG9pdTdHdWZyUmVkMklRSE9oVm0xaHFEWnFuQmpzdUduVzFNMDhsNnJaemlQZitSa20wTmtDS0cxUis3K0JIV3hqdVRoZGxmMjd4cElqMk45NmpVdE8wVzZBRDltM3pjbHVRT0UrdnBnSmVIcS9JVGtiZis2ZHB3Yi9DZTY4ZFlZalNjMytlYTcxMGgzakdwS2Jubm5ySEFUTHhhdi9JWjB4KzhCcE4zU2ZONStIcFpHSVhIbExRbG01TkZVRXJBL3JWQnBVdVdCVHVyc0cvN21qdzljSHU1bUxhMzFKVFFYbVBJckJ2bjVqYmdzUzdsTllUMk03aUYzM3ZueGFoM0RUdDhRRE0zRjFFMzVTVkM4Rk5ubEZIYW5iUFZUUE1DZXR4STliSEs4VTFvNFBXeVdzTG1xZEZvaTdUZ2hqWTV6RkJYSWF5MHdTWElqN3ZYV3hRdVV1cG9PbE9Wd01HNzJ6TnYvMk5kWE5XK0dBR1lCKzVMWEJlMlFBRUw0NVhaQ2RqQ005NTdKOUt6UUoxYmhNWUE1VDdNMi9ER1QrYTFQQTl6RnVhR1FNc3FpOWZsY1NyelJRQnI2eUxCNzlPdXBhZ2VkcngxdlZpOTl5amtJMkRkM0d3VTMyTGcvbXVOcWpZNGRXOXJ0bzZwdzdLR0JERTlyZlVoZWk0UUdjeEFOaW56Y3N0K0thdmhOM01GQUVETUMzNDJxOXNtR1lvMGhyYmNlYVhPVlVuV1h0bXg2R2VnMVJqcGRtWVY3MVBtYjlPbVM4VUE2OVZQVWZ6Y0VDR3dycE9tczg3SG1BNC9aclh3M2p3TGc1MkdoaDF1VUZsN2k1MFhyOXVRM2ZwYUM4RU5Zc3dMWGh3UHBONkR0aTMzY2pzZWs2OTN4eGVITTh1Z3RQbURHUGVWbW9XUHB2QUdOcjh1WVE2K2RhdElxbnJoUGhFVVRZMkJsZ0cyUlQ3M2k1VGp0bSsvK0RWUWZNVVFEbnYrQmQzK2pXL3ppRk9zQ3lFMUc4ZXV0dWdZbk5LUHJwczh3UTF5eGljendxOS9HTVRDMkRQTm0rUjRaZ3p2dDk4NHU3QVZsTkZ3QUQ2cURnbUx6Vk5lOXd3TFVoSHI2VzFqZk5DTG5mbWpwSFVOYzg0bGNHZzhUSEFuWkxZMjVlMHJnbDExY1g1dm5YeFZVSHpOTGpJb2RPZXUvMVpjaUsxM3NGODF4dFViRTdKeDZMRG4rM1VRUmtEZ3BMVHRGdWdBL293RjVoYmhJS3RZNVZsOWVXTGttQUFwZ1ZmdXpUdDlGMUo2NVluTm1XUzFQa3VjbXN2eGdDNW1Ta0N1cTZMcnoxcFBnL2R2L2Zsd2VuWFBLWDc4a2xKdkY2YXFIYmRhU3pjaVd6cVZ0ekEwR1g2N1hOQnpXSUdCS1dtYVJkc0F2YnBGK09jSkxkZC9DY20vUEFpZFlRaDlGRWxwMm5YbHpHRU9YTkpIRTRpRWpRdlp3eXdxTDU4VlJJN2M4cWNKdXZpem9mTERnNmFqMGFqT0xESUlZV04wNjk1aXhPc0I4WHdhdlBROFFhVkZLZ2xINHV1bjBsQnpld0hCTXNnVFRzd3JERm5ibUthOWpPM0JyYU9WWncyWndqUGV1eWpTazNUN3BVajlGSmExejR1N0xJdnZDNXY4TS90bTVxZlc4OVU4K0ptRjdHUmN1ZjBEUEQ1T2lob25ocm9YQmF6Ris1MzFwUEQrMkFuNUdzSFJIR0NldEh4WlhnL2ZYNjZidnVPRFdhS2FJTmpYMTNxcnRaTEMzVEFIcnJPd3JMSjNLMkJyWXduR1lxM29lQXNVRzRmUFRRdDlMcXRzUTdibVdlcUxHbVRxRU1oTDNQS25LYnI0aUxzR09NNjlLUjViRXh6MlkzbjlHditEMlNjWUgxVEVrVlBVQmR1UTNaeXVDZE8wSld6R0NCTk85RDM4ZVo5cHZPQzAzU1NDWGkrN2k2RDArWU01MW1mRlhyNThWM0tNM2VSdmtnbmE4OEx2ZnlwT2ZLZ2pUMVRSWTRCWWg5NnB5UTJlZ2cyMHRLT25aNnp2WVBtYVdEeElaTmY4bHRhSUNOL2RxMGROcENQNVhhU3dhVXMzSTNzQmx5M0lZOUFxTjJTK1Q4cnNaK2NGbnI1M3FNSTlLRlB1cklRQlZ2cDZ4bkt1RHoyVTZWbWNmdGd3elE5c21tTk1xNng1QjdZaW9mWXZJZDZ1TVlOUFZQR1lzMmJLb0xOODJXbnpHbHBMTDdZWlN4K3lFbnpuQmFqRm01MVVRK2tFd1I3U0l1cnM0enVIL25KNGI2Y1Y4K3FDVnYrYlhBOGZWbHFtbllaRFlCZDI3cTRvU3pIN0VaeEljb0dVdGhjZDVmbWlneklOSlNiQmNxR2FmcFVENThUNTgyekFxNS81aFlPVmxNYmNhMjdORC9lWFlSeTErV2E5R0I4UVc1OTZGNUI4MHplcmJ4dTRSNFg1WDNCazhPdXlpdUgxeUI0bjNtK2Nta0REVzdLV1Jqd0hrV2c3M0p0TDk0N2JRN0drMUI0bXZiemxBMFBpcFZlbTNPOHBTKzZMbURlZkpMVzZCbWVKZ1BiYzhYYi9Kd3dpSTM4bzkyVlNacVd4K0tMOEVLOGE5K1Q1cmtON0JkdWMxRVA1SDJ3RzNMWFFmdzQ1UE1hQlBVc1g3Y1pUZGltYmtjUmJYQ3A5K25VZXhTQkhjMHp2YTY0T0Nzb1NHNXpqbG4xV2FSUHA2ZUxVcVlJbTNVWnlyaTg1RFR0czdSZUFhWGFOQ2VPcndDOVRmUG1lUUcvaHcwczFNMjZTL1A5LzlLYzhCK1VCNTJNWjdmOTVjNUI4N1NEN1R5alg4ejd6TXVkSEg1VEVxK3J1QzI3ZFR1eXJVOEx6eXg3UGpNbHAybC9iNEVPMktHZHU4KzRuYnZVanBHTHRVMjY1K21UUXlZRTQwbUdaQnJLUEcwV040SE4zVDRLN3ZzMnJXMWZiZmpmdWJvd3JxUUJIN3lDc2ZINWFoenYzaW1KdjN3UjM2T2plcmdJV3phdzduUFNQTGNKckVCZXVleUdmSGtRZjZtdXNhTmNUaWc0YlY2T2VKOHMwQUY5ZHAxNUd3em1aTTlJaXhjV0VSbUVkTnFzMUxXUmMwRVZldGozWGY5UVA3OFcvdnZRVDIwY2FKeDd2N2s1WVV0bWlvQWNuNytkZ3VZWm5qS1BCUExLblJ3dVFya25IWWZXWVR5a3lRTDV1dlhzc21jYkhIZHhscnJJNVQyS3dDNXlEcHA3dHptZFM4L2dOTk54eXJqNmpPTEhuV0lBNC9KNUtIZHRaSzQvbzBDYjVzSFBuWFlzNGJUNVZEMmtBZkhBd2tMZ3ZOSCtmeEhFUnI2SU9aQkJQWHoyTU9LdUo4MW5HZjVlZ3VabGkwR1BCOFh3UGFmTUtmd2VPVzFlMXNEZ1U2R1hQN013QUx6UXh0MkhmTjhWZXh5Y0NpS1B1ZGl4WW9Bc3hQbVRMRkRRc0pRZDRXVERYODgzekpudkNxaUhzajdRMUxNbGNONzhlSHpJc1pHWlI0QmNuOE1YZytZdnZPK2xNNW05eTVmOTc5OHlsTEZyczRzT015ZnFXZjZXQmoyODRsNlZtQUxWQWgyd0N5bmE0Zm41L1p0ZzR3WmtJMjMwS3JWZnVFaVpLYUVFbStyWjNaWTE1aExXTFdkdUxRMFJPRysyLzErRzRjWkduRElubDNvWSsvOS9ITGpZNWFSNWpwM3ZON2UwRnc5bGZMYThzeTdKTkUyaURxeU14ajBuVHB1WDgreVV2a0JuUnoyd1RjNUI4eE50R0IxeXloenlHNWZIUGt1YWRtaElPaEIyc2VHdnR3V3Q1aUgvazZBbk5xL1FvRlhnM055bEdiSDlHV0pzWk9iV2s5Tlk5c2MvT0hwaFVCRUh2amsyaWxKRzk4ZFVFWHhYRnNmcUdnZTRVNjg1Uk9GcDJpM1FBZHZhdDJYSWV3SENTVjlhNTVRNVpMOGVVR0thMXBqdWV1YjJVVUQ5MmppdjNES2VqQnZOcnd2NC9mVHROQ211VmY5UmpTTzE5ZlhQV2U4SFdIK2RNaWUzZWhqSEFkK3RIYjEwMG53YTh0eUZybUwxNTZGY2hISjNWUGQra0Z2ZEgwSHpNdVRXSnA1TDMxU1VXU2czVGJ0Skc3RE5JdU5yTzArbm5xRHQrWVpUNXBDaHdyTkF2VFAvSTNPYjZ0YVhWUGRlbWkvbjdzSzRjakM2WEx2NVVEMW5DODlhN2YxLzNKaHpNNkJmZWU2dWs2SHYrdnFYZ3VhNTduUlp1SSs5RXAremh5RVhRRXB6YzJJZ1JvL2FSRHVkeXhtZ2w3NUFOM0VYZ1ExeVB4azBkWXRvY2I3aGxEbmtQeTZQL2RhWFFpOS83ZzZTYWYrM2JiMXR2a085WElZeUFscjYrR0ZZZHZ6eno2dlByWFR0dFl2bCtVdjY5TmxOaHE4WmhYK2NOai9hTXFpWWhQeUNlTGwwRU5UN1VNYjdlVFh3WXBpcVovVHNYcjJWT3J1b2RqZ09XajhXZXZsemR4RFlJUGNKK2RRdG9rVk9tVU01ZGJYRURleW5VdmRTMkhqcmJvL2dUUWxybGxOck1MUmtsYTdkcWZPYXhNTXNzVDBhUUVEWk9JR2MvYSt2UHpwZ1VKRkRRN0owRDN2NVVBN3laSE1hMUY1a2VHa0xqMlV4Y213VDR5RGF6dE95QnVseDhQcXR3RXMvc1VBSGJHalg3ak52MTA2a3M2WEYrWVlUYUZCTzN6VXQ5UEkvQ0tDUVdmOFhuOGRONjIzelBlcGx6QUtSKzVxbE5aaGhXR1owTGZIVStYL2plb3dORzJ3UjI5cS9UdEU3WlU0cHorcTJvSG11SGUwMzk2KzNFOE9oTHVSTVBRRzhVcTd2bnJjNHF6MXF5d2VCSjJDRDNDZm14b0cwSVc1UWRzb2NDcEVXbFQ4VmV2bHpkNUJDeGxuN1Bxc2xuRGFmdWVXOXQ4endtajdFNnhxTlJ0WUFlVzVNc3h6SUtYcktmMWIvbC9IaDJhQjUxY2hOTTU1VTM3dUZ2WDB3VisvdnVnbGx2QytvalVGOGwzUm1CVFhxbVY3YXFaTUd4VDFMY1FPR05PMUFuOXhtZm4xT0JOR29OQmE3VkJKUW5Ga29NeHZmdWNBSkdabHUrUE92QjJReGpmUE5oOHgvMzVQMHVsWDZhNW5wZGNVNDB1L1Y4N2RNY1NXQVltMDZhWjd6NHMzQ2JldXZhdEE2clQ2VCtCbkM3NXNXc1U0enZUd2JWTXFTYXhZT3dZRHkydUZaS0RPcnk2a0ZPcURBdVlNVTdUUnRwZ2lneURGNXlXbmFaelpQMDdYcUdZeHJFU2NiL25wK1lKMjhMdUJYTnlmdXQyWHVjNXZxODdtcWYvZlN0Z09sT25wbVVKSHIrNVZYQlBMb2syd0hzK25FS2VYSXRXMmN1alZGS3ZXK1dhQURmaHpQTEVQK3A0SW03aFJOU0tmTm5ES0hjdnV3UlNnelRYczhjWGpsRHBMcG5QWXVaYm84YUw1WndPOTlZVTdjKzM2aGxINWdsYlo5N3BrRVN2TGNTZk5KNXRjc2tFZWZUQlFCUFc4YnBXZ3ZjeUpXYXByMk9ER2J1NE5BWWZPSHFWdEVRMmFLQUhwUmowdE0wMzZSVHZwQzY5SWF4S1lEWVFmUEY5Tm16QkplSittMGViK1ZsQmt3cnRIRURaei9yZXJsUXVwMm9BVFBCYzBOYXFHOVFYeXVxZGx2M0tIaTVKeUZRNzlTb0lMVHRKOWJvQU4rc01qOCtrNmxMcVNCdVVic0M4K1ZCQlEvSnI4dmVENDExNy9Sa2VtMjUvSzF6M1VKdjcrNjEydWxIaWlNNDlKVjZ2YTVWMVFCdVNvdWFGNVFHaEo0aWFBT2RWb1dPbUVsLzNicW9jRHJ0a0FIbE5KSHJremNKbW9tTlRMMFJPRlpvR2J1SUIyWWJ2anpyK20wK0d2cTR6emtuLzNoT0ZoejdMTkY0ZGUvT24zK245Rm90RXp2UGgrN3JVQXV2Z3VhcHgwK3g0b0ZXcEh6QU5ackVNcXp6UGphbktBclZGcFFtQlU2Q1p1N2cwQkI0NXFKMjBSZDR1Smo5ZVZFU1VDdnh1V3hYcGVZQmVwZDFTYnA0Mml6RDN5N3BRK3NhNDVZd2x4ejVtbm9yVVdQZnBkWVYrTzd6MlA2OXR1WXZ0MzZJZEMxSDArYTU3NEw3WnRiUms4RzhYRUFrSE82eEh0M2laclo1VnlveDhmSGVGS3R4RmMyWEZpZ0ExSTdKbWpPa09ZWjQrQmRwdEJYMDBLdld4WW9jcWduRDlXWThMcW1uMUZDTnBjVDgrSGV6bTJXSWY5c0I0ZUlyekQ5WEgzK3IzcDJyNzEyRCtqS2owSHozRHRUZ1R6NndzQ1Z1Z2ZOQzg4OERab0dhZHFCc3VXKytmYlVMYUltY1NGZjlqam81NXl2MURUdDhTU2h6VHcwTG0wY3U5ZzBONnl4THNiMTZTOEZGSWw2MTEvWFBmLzlZajMrdy92UGdTNzhHRFEvei94NkJjM3BpMG5tMTdkd2l4allNOC8yUllGbEtETzkyMG1RbGc0b1pCN2hOQkExUFVNWFNnSjZQUzZQWTlzU3N6QitFUFNnQmRNdGYxZjM2ZkFTVHB0ZmVGZDBiODBIOG50Ni96blF1cU1mSnRpNTg1NWwrbUtpQ0JpWUV3UGJzaFdjcHQxN0ZJRm9ZWHhJbjZYTUtuTWxBWU13TGZTNnRWRjBWVGR1MGtid091Zkh0NFhNajZjZWkvNUp6OS9kd0g1dDd6OEhXckYrMG55aU9LQjVxVU9YZ3BNbTVENWgwOCtVTDA2NFMwelRmdVhXd2VDVmtMSEtDVHhlSTZaZ1BWRU0wSDhwV1BKYmdaZCtPaHFOcEl1bUVlbjl4NXY2d1hsRFAzWmVRTkdvYy8wMUgvRHY3djNuUUdQV2crWWxMTkpJejA0ZlRBcVloQy9jSm9iNDdQTmkyN0FNWmU1VWp3dDBNM2NRQnEyRWpGV0M1aHdrcFR6K29DUmdVT1B5VXJOQVNhMUxVemJOVXgrcStqSnZxQjdHNzV2N2FkL2plQ0xYNDlGTGMwWHdGKzgvQjJwVjJrbHo2ZG5wQTUwM25uMks5Zmo0ZUYxOStWcmdwWCt3UUFlRHRpemdHcDBTNWxCelJRQ0ROQTNsWllFNjFtWlJ0elRQdStpb2p5emhlWGJhdklmU29ZWXZTdUs3L3NYN3o0RlhPMW9iWEJ3ckRtakZSQkhRa053M0Zua3RRWDlNUTVscDJ1ZHVIUXhUM2UreGJFbzFMek5PWk45blptYU1CWVB1MjJZRlh2cTVrNjgwTUQvZHBPbFhkWlV3eHp3MXh1eXRtU0o0bHZlZkF3ZGJuVFFmS3dwb1RlNm5iZS9jb21KbC93b0xFN1YrZUh4OGpNL2F0TUJMUC9jZVJSaTBFamI3bUpleHo3aEtXbll3TGk4MVRmdVZBQVkxMmpRMy9kYjB4c21DVHZ0T1BTYTk3QU9XaGZZQmJmTCtjMkF2cTZENXBKRHJsWjZkb2hXUzFXSHBUdEVnS2RyN016a3JOVTI3RkYwd1hDWE1KYlJQN0RxdmlNR211WklBZ2pUdERMcy9qQUd3VGErNHVXcnBNa3A0bGkvTmczdmRCN0FiN3o4SFhyUUttaGZSUUtTVGJWQXlBMVNHem9DMGY1T3pFaGZvcnR3NlFEOUo0V0pmSmkwN1VIS2E5Z3NuL3FocFR2cWNPRSs5YnFrT0xxb3Yzd291SzhydkE3emJmRC9lZnc1c3RBcWFTNGtFN1pnb0FocFV3c1lpZzlCK1RjNUtUZE51Z1E2R3FZU1Q1dVpsdkNpOUMvaFNTUUJyNDNKcDJobGlmemdPVHlkSG4zUGQ4dUdyRWpabWUxVlpmOFY3KzZBWUR2TGorOC9mNjVkZzJGWkI4M05GQWEwWUt3SWFWRUl3UUgvVE15bE5lNG03bXVjbVFqQTRKV3d1YzlLY3JWSWFTUmxUZ09mRVRhR2xCVTFpc0dMbTFuR2c2WmEvYTdXdnJPYkY4d0xxMzNIYWVFZlBwQTBpMnRMWGkxbWNmZy9lZnc2RGRsVFFnckhkVXZUQnVJQnJ2SFdiYUpKQVpTL0ZYYzEzaFYzenNVa2xrR25iQk52R1VOZWVFK0E1QldlQmVsZTFieE4za0FOc2V0Ni9WZldoaTdVdHA4M3BzZzhvTmVOSXJsYnZQNWUrSFFZbW5qUXY1VFNEUUI1OVVFSjl1M2ViVUEvWWMzSm1nUTRvd2FLRWkwd25pV0hUTTN5aUdJQXQ0L0s0c2VacmdaY3Vnd2I3anBmZWJ1a1R1M3FlNWdVVTNhazVjSzlOZzRPSGRWdFAzejVYZjZEL1l0QjhyQmlnTlU2RmdQZTE5dExqNCtPaSt2S3B3RXVYcGgzUVQ1Szl1RWdYbmxKR0FyeGtHc29MbXNSQTNzeXRZOC9uL0RueDJiL3VhRTY4REdXOHVtenE4ZW1uOUF5NnY4MjVyRDUvVnYzVlF2QWMra3ZRSEZyaTFCRDhqN3JRWDdOUVhwcjJ1R3RZaWpvQWNwNUh6TVBUSWgzQWl3ck9BdlhCdWdrNzlvdmo4SlE2K1RuWHFRNTBaVjVBRVY1S05kM3JQaUJ1R3Ztb0pCcDFIcDZDNTdmZWV3NzljNlFJb0RWT0RRRjluNXhab0FOeVZzb3JhQ1p1RlNzQzVzQ0I0M0pwMnVtemJYUE9lY2QxYjFGOStWWjRHVkorSHpBcnRBOG9UY3dDOVllVDU5QXZQd1dMTXRBV1FYTWFuNXhWZzdRU0xsVy8wLy9uTUtacGYxZllwYytETEFqUTkvYnB0cEIra2c3SDY1a3RlRTJEZ0Rud3VqWmtHY3A2VGR4NTFRNi9yL3Bzd1hOZWVyYWZjNWVDMWwyTHorL256TXN3Wmx1YmVaUjZYMDlpZmZCNm54YjZydkIwOHZ3bWxudEtrdzhVNmlkRkFLMFJqQUdHSWs2K1k0cXFrNEt1K2EvM0tLWWQyUUFNVTF4VS9GTXhBSDBRczBDbHRMR2x0V3V6NnJxdkJSMTRUbnFtTjgwemM5bHNjWjJ1SmVjTks4ZFZXY2JnM3R4VDFlcytZQklFenRzVWcrZi9UUWRKWmgyL0tnSTRrUFRzQUxSTjFvVUJUTTdDVTlDOE5PKzkydzBBZ0I2Tnl4ZlZsMCtGWFhZTU5NN2RQVGFZYnZtN2VTYjE3cjZRWi9pOXg2bjNmVUI4RmllaGpGY0c5RW5NdkxqMHZuTW9Vd3lhbnhkeXJiZHVGN1Jpb1Fob21CMnV3NWljeFg3N1kyR1hiWUVPeU1GRUVRQlFvMW4xdVN2c21zOEZHL2hSMnVCOHNlR3Z2MlIycXJPRVZ3eWNlZzl6L3dtY2R5YXVMOFgzblY5WEg0ZUhvQ0FsblRTWHpvTFNHWWdDUTV1Y3pRcWNtTVVGdXFtN0J3QkFUOGJrY1QydHhQSHRYS0NCSDJ4N2p1ZVoxYnRsOWVWcjRXVkt2L3FCU1JBNDcwTGM2T1BVT1JSRWVuWUF3Q1Q4ZTFjVzZBQUE2SXVDMDdSZnVYdnNNTGU4Uzg5NGR2UEtBc3IwMGl2S0J0TVByQUxuWDVSR0ovMVpQSFd1VDRNQy9LUUlBSUFHSjJhMzFjUWdwbW4vVU5pRVpoN0tmQzg3c04xTktPZjFWTFF2bnI3SjZmMmUwK3B6NmJZQU5abWw4ZTFKUWRjY0EzcnpUQU9pdENpbEVkLzA3R1laaUlyUGJYWGRkd1hVdVdscUgraTVWZWFSNnJsY2hyTFdhUHJpWFdyTEpwbTlUZ0pZSTJnT0FEUTlNWnVsVkZRbHZjLytJbDV6ZGUzWDdpREFZTnhuRnBpSmkrM3hxOEE1VU1lWS9ENjlodWpQd2k0OXBtay9FMkFZdk9tMlp5VGo2NTVWbjgrWmwrMzdJR2crdFA0Z3J0SGNwcnB6ckVSYUZkZkZZcnIyR0RpL1ZSeVFIK25aQVdoZDJsbkpzRXdMdkdacDJnSG8xT1BqWSt3L3BkRUU2bXBURnFHOE5PM3hsTzdNM1J1dU5DZmJ0SUhzYStZYkt1SW03SWZNaS9nNGJhaGhXUDFCZkRiUHdsTW1MbHF1YytGcGM2eDZCeGtTTkFjQTJwaVF4UjIwdnhWMjJSYm9BTWloRDUwR2dYT2d2allsbmlyOVZ0aGx4NVMyWis3ZVlFMjMvTjA4OC9wMm4vczFKdTg5Wm9Qc0Q1YlZaMUw5ejQ5S28zVXhjUDVaNEJ6eUkyZ09BTFExSVl2dm1pdHRGL003bVJFQXlLQVBuUVluZ1lENlRBdTg1cm5iTmxpYkFycDNoYnhPNjZxQWF6dzE3eDMwT0hOV2ZmblpXTE1UQXVlUUdVRnpBS0JOY1RMd1VOZzF6OTAyQURMd05wUjNPaFRJVU1vQ1Zkckp3aGpVbTdsN3c1SUN1U2NsejlQaWFkNVFSakJ5Nm9rYmRyK1FUcDNIRElFUFNxUlZBdWVRRVVGekFLRE5pZGd5bEpmeS9NUUNIUUFaOUtFeHhlczBXTWdFNm1sVDR2aTJ0STA0NzZ0eCtkamRHNVRwbHIrYkYvUjdsSERhL0ZMOUltVUlqTStCVndPMVMrQWNNaUZvRGtBWDdoWEI0Q2RocGFYOSt1QTlpZ0JrMElmRzA2RlRKUUhVcExUMkpMNERkdTYyRFVNMS8zcFRmYm5jOE5kZjA0YnNVdnJ2bUViK1RwdEFJYy9yZlhvMTBMK0NsTzF0K3V3MUNkQTlRWE1BdWhpQTN5cUZ3WXNUc05KT3lsMjViUUJrTUk2S0MrK2ZsQVJRMDd5c3REVHQ1NlBSNkwyN041ZzU0eWJ6QW4rZkV1YVQ2aGJyZmNReXBXei9KUWlldCtYYWdRM29scUE1QU5ESjVDdVVsNmJkQWgyVTc0MGlvQ2RpSCtyOTVrQWQ0L0lTMjVOWk9vVk12MjJhZTkybERXU2xtWWY4TjQ0ZlN4SE5NLzNFUXZDOHZUb1kyd3A5SEhSSDBCd0E2R3JpVldLYTlwbjN2RUhSVGd1NHhxWGJ4QTU5Nk9yOTVnQjFlQnZLeWdJbFRYdlBwUlRGSnh2K3VzU0ErYXJ2THVIYWJSUm4wek84Q3A3SHRPM2VlZDdzbkZVZkJ4MFJOSWYyZUljendEOVpvQVA0M2xJUnNJdEMweW9EZWJZbnNlK1pGWGJaRjZQUjZLMjcxMXZUTFg5WDhtdXpTcWhucDk2cnpFdDlSbnJuK2Y5TFk5RTdwZEpJSDJjREMzUWdCczFMV2FqMkxnZEtWOG83bktWL0FkcWNiSlY0VXU3Y0FoMEFtZlNqc3lCTk8xQlBlMUppRmlncGJIc28zZFBMRFg5OWt6WjVsRnJQbG9YVXM2a25rUjJlNS9zNEZxMCs0K3IvL3J2NmZGVXF0WkxwRURvUWcrWUNlY0E2RzFSb212Y2Y4ZU5FNjdyQXlaVUZPZ0J5TVZVRVFJM3RTV2xab0dadTI2RDZ0WGtQZnI4U1RzcGZDdGF4ajdpdVUzM2k0WUo0K3Z5MzRQUjVYWDNjWERGQXU2Um5Cd0J5TUEzbExkQmR1VzFBQTI0VkFmdVFwaDJvc1QxWmh2S0MwTytra3U2ZFRTbUpINnBuZE42RGVoWTNqWmNRVUp4NkZEbmcrWTZuejYvUzZmT2Z3OU83engrVXpNRmlwa04xRVZvVWcrYmVzd3p0V0NnQytJdCtoMmNuVmdWT3lpOHQwQUg2U1RMcFIyZkJpUjZnbnZha3lEVHQ3bHcvcFBuVnlRRHVjd2tic0wxUG1kZjJKN2ZwM2VmajZ2TnJrSG55VURPWkRxRTlKYVZuQitEbHlXVUo5RHRzbWxCSjB3N29KK0Z3VTBVQTFOaWVsSFF5OEtUcTUyZHVXKy83c2o1bCtwb1hjSTNIVHJoU2gzVDZmRjU5NG56c1g5WG5VN0RaYzY4K0x0akVBcTJSbmgzYXMxUUVBQytLay9LaUZ1aUM5eWdDTlhwOGZGd29CVjd4N0h4UkVrQU43Y2t5bExkQS8yRTBHcDI1ZStWS201RXZOL3oxVFhvdSsxTEg3Z3Zwc3dYcXFMMS9xVDd2VS9yMmY0ZnlEazUwVmhjZDJJQjJPR2tPN1U0NkFhOHFZSHRiR1JjUDNoWjIyZThzMEFHUWliaTQ3YjJSUUIzajhua29NQXVVTzFlMDZjRHViUWtuNTA5bGE2TEJmdWE2K3NUMW4vOVhmWDRMVHA5dmN4eHNZb0ZXbFBSTzg3SGJSUS9vL0FGZW5qZ3R3bE82cnBMTTNUbklYZ2s3ODcrNVRieXlENDN6K3lzbEFkUmtHc3JhaUJNRGZJSUs1ZHAwN3g3U0pvNis5ZG54SU50TkllMEFORHArclQ1WDZmVDV6K0VwQzROTm9NKzBrVTZiUS9OS09tbCs0bmJSQThzQ3JuSHNOdEh3WUhpaEZOakJMSlMxMGVqVWV4UWhleVZraExoM202aGhyRlZhSHdyazI1N0VmbWxhMmp5aUdwZVAzYjJ5cE5QTW05WityM3Y4cTg4THVNWkxkWW9XKzUzYjZoUDduZmpNL1Jwc0tsNFhUNXUvVlF6UXJKL2lBTGpxK0pRRXRDTnVVam5QL0JvTmhHbVNuYUxzT2xHSzQ1TTRVZnF6b011TzcxR2NleDBIOE1xeEl0U2h0RDRVeUhkY2ZsMk5jV09hOW90Q0xqa0dGZWJWWitMdUZkZHZiUndmOVRoRmVKdzdQcVRuTnZmN00vT1kwbUxmYzUvYThubmF0UEUrUFlmSEF5K2E5MEdtUTJqVVQrbHJUQVZ6cmppZ2xjRXdOS1dFRTNTQ0Fld3pTVnBVazZPWXB2MWRRWmNkSnk4VGR3K3lOQzdnR3AwMHA4NCsxRHdmcU1zMFBLMW5sQktzT0k4YmNQdVkwcnVQVXJyaHl5My95ZTlLcVhNeFVEZFRESFEwcmwybVp6Q21KMytiK3FTTGdSWkh6SEo0bGw3dkFEVGdLSDFkS2dwb2hRNk5KcjFSQitpaE9ERXZLY1hzdWZjb1FyYkdCVnpqd20yaVJ2b2pvQmFGcG1tLzh1N1hZa3dWUWZhT1V5WTQ2TG8vdXE0K01YRCtyK3J6V3hqbUs0blVSV2hRVVVIekhxZmlZVGdFREZFSFlMOEpVYW52VWJSQUJ4eGlxUWlvc1ErTjQ2NHZTZ0tvcVUyNUxxeE5XYVZwSjM4MmVibFBzRytmdEt3K1Y5Vm5YUDNmWDFML05KUlhRbnF2T1RSb0ZUUmZLQXBvcFVPUHdaL2NkOENkdVZNMFNOQ2NROXJPT0U3NVZOQWxXNkNEUEdXZnBqcWxIb1E2elJRQlVLTVlOQ3ZwVk4rRkF6aDVTL2ZuUkVrVTRWUjlJdE01MUtMNlRNTlRackZmcTgrM252L0tKekZGdXpzUHpaQ2VIZHFYZTlEdzJDMHExcmlBZ2F5Z09ZYytPKzhMbS9oY3BIZHRBZXpxUmhIUVFQOFo1L29mbFFSUVU1dFNZaGFvdVN4UVdac3FBdmNMNnVxanFzKzgrc1NBY2t6ZkhnOWY5UFgwdWZVbWFNaFBxNGwwTllDTURVanV3Ykt4VzBZUHhLRGhoV0pnZ0cya1lBQjFUTkQvVTlEMXhnVzZjVnBjQkRwVXlLa1lHOHRveWxWNE9oMXFjeXp3YXZGRVg5V3Z4a0RFdTBJdU9aNWluZ1dwcFhNY244WE5ESmRiMWc5bUF5dVNPRjc5a1BrMVhsYjNiU1k3RWdYMFZjdlU3cit2bnRscGVGcFBPdS9ScnpoeGw2RVpQNjM5NzBYSVA1QTNkc3ZvZ1VYdWcrQTRjUkhrb1FHQ0FieDIwbk5idFU4ZlEvNExDU3N4T0RFTEZ1Z0EvU1RkOXAvM1ZmOTVWVkQvQ2VRdmpuSGpLYmRTMG1xL3E5ckI2L1RhSi9JeDNmSjM4NkhkcitvWnZRMWxiSEtiQnE5L29heXg4RHlrUXcycGprMUQrWnRKejkxWmFNYlIydisyU0FQdGROUWxEUHE5RjZWTXVhZWNXN2hGMU5DR3hzbDVTV25hMzNudkcyU2hoSHBvUGthVFl0RDhRVEVBTlkzSlMwelRmdVhPWldmVDV1S0hGT1FhWXIyYUYzemZJUGM2dGt5di9odUhwM2VmMzVYOCsxaHJnbWFzQjgwWEJWeXZRQjU5SVUwMVRUak4vUG9XYmhFMW1SWjJ2ZDZqQ04zTHZRN0d4V0ZCY3hxVEZ1SUZqSUE2MjVVNHYvdFUwbnc1cHBWMjUvS1FnajJiTWhYTUIxdzBKZlRWeHluZE5SUTdMazd2UGgrSHArQjVxZXYwRTNjVDZuZjB3MkEzZHhhYzZZdUZJbUJndmtuNVQ0MFRuQmhZK2xqUUpjZkZJTHZ4b1Z1NWI3NDFOcVFOVHBzRGRadUZzazdxZlVqcGVlbmU5SVgrYXFoejNXWDE1V3NCbDJwK1MxL3FYQXllVDZyLytVc29MM2l1UDRNR0hQM3cvNTEraFhZc01yKytpVnRVbGdKT3NTN2NKV3FlMk14Q1dXbmE0d0tkakRuUW5iRitFbjJuMCtaQUkrM0syOEl1ZSs3T2RTdXRYMXh1K091YkZEZ2VzaEw2NmxPcG9lbFpmN1pJd2ZOL2gzSTJnMWxqZ2diOEdEUmZaSDY5NTI0WmZlbUlnMU1lREd1Z3RIQ0xhTUMwc0xaMDdwWkJaMDcway9BWHA4MkJXaFdZQmVwOE5CbzVKZHY5UE02Y2FYT2RpdVBDdThMdkk1UmEvNjVUMnZiZkNoZ3puN3BqVUw4ZmcrYlhpZ1JhczhqNDJzWnVEM1VQT3BVQ0RUeFhjWUZ1VnRBbG4xcWdnL1lWY0FyRys4eHBzKzkwMmh4b29tMkpZL0tTc2tERjZ4MjdjNTE1djJWTU5GYzgvM3RHYzNmcGRRZjB1Ris3U3YzRWw4em51dW9nMU96b2g4WWdMdFk4Wk40UVNEdEJYK1FjUk5UaGxpZm50dkdyMjBQREU1bVNYaTh6QzFKb2dUNnluREVoL2VTME9kQ0VhVUhYZWh4c0lPcEUyc3k0S1FQUVhBbDlOejU4VU8raE8zR3phZldKejNoODMzbXUyUi9HN2hUVTYyaERwNXl6TjI0YlBSb0FxMmNNNFo0SkJ0REdSTDJVeGYvajlBSGFNODc4K2hadUVXMXkyaHhvcUcwcExVMjdNWGwzYzdkTjVvcm51NzY2aFBLUVNhMW1vOUhvcXZvczBtZXNSTEtvajNHK0ZqZGlmMUVhMEg4bEJzMmR6aHJPSU9GNk5Vam84UUE0MS9SbDNvbFNucHdIMG9MbU5OMmVMa05aYWRvQjh3ZjlKRjJiRnpRdlBLcytzL1FadTNXUTliZzhqc20vS1FrMnRPZHhzLy9saHIvKzVuVTEvMURDQnJmajZyNU8zYXJhbmFlUFRZNzU5RytyVStlL2hyd09iVXpjSGFqWGMwSHpSZWJYN0FUc01BYlNzUk82V0JzazlOWGMzYVltNDB5djZ5WnRFSUdtSnpDbHBXa0gycFB6V0ZJL1NWZjk1akk4blFpOVNaK2NuOE5aOWZtUVBtTjNEN0kzVlFRYzhHd0lEajdmVjVmd3VqdW56ZXUxUGlhN1NLODBJSjk2T1E5UGdXcXZPb0tlT25xbTR0OW4zaUhyS0hvdTdUeWREZVRYdmM3NFBxaHJaUmxuZWwxenQ0WVdUVTFjZ01MR00wNlowNWw0SXJUNlROTG5OdE02SE9lR0YrNFdGTlcyeFBia055WEJNellGVngrTWlUWXFZVFBCcVRYRXdUOERRK3pueGtGbUZlaWxvdzEvN2wzTGREMklQaGxJSjdzTVpld2FKWCs1MWhrVFg5cHVVKzF5QjlaSnpRNWxteW9DS0hKY0xnc1UzNG12MmdpYjF5MnVaZDdaV0pjVzFaYzcvZldnblVxQm4yWGRqRzNXSkFpY1ErOXNDNXJuZWxMTHU1YjdQWWlPbXlLR0Z2RElkYkYwNG9rc3B0Nk1NNzIwcnlhK2REQnhtUWVia1lBeXhqTmYwMllmWUxPcElvQ2k2NjhzVUt4c1crdHprbmE3V1FIWGVKbngybFF2bm9HMFprNUdNZ21jbjdrVFVLK2pMUlUrNTdUUk91SCtpZ1BsNDRIOXpybHVVakVZSzBldWJlTGNyYUVqMDJDQkRuaVM4eUtDVSthd2ZkNGY2NjlOODFDb3RERnNwaVJJd2I2M0cvNzZXNjZ2Q01sc3pGakMvSGJxVmpVbVptbVFWUy9Qdm00Vk9POHFJNFQxZTZqWjBaYS9tMmQ4M1dPM3JwZUQ2TGdvY2puUXpqWEhSVk03MWNxUjQ3MjZxNTV0d1FDNmJGZE4yTUhZTXM0WmNuMTlpWGQzd3Nzc0RrUDU0M0pwMm9saXdIelRBUm1uekhlYjM4NzEyOFpGRGhKbVhVZmZCb2Mzb0JlT3RsVDJSY2ozblNrVHQ2Nlhydnp1V1JFMEwwZU9nK2E1MjBMSGs1WVlqSkttSFlZdDV6bURkM2ZDeTk0cUF1aUZhUkJJR0xwTndWU2JDSGRYd3BycHNYZHZOMXUrUWZhT2JLV01HVGFPUUE4Y0Zkb2hDK2IxVERXb21sUmZ6Z2Zlc2VhMisvcllrMW1NSE52RXVkdENCdUtFM1FJZERGZk9BVGVucW1ENy9IQnFQZ0w5SUUzNzROdnpiYS9hc0lsd3YzcFV3cVp3UWNObVhhWTZSWjcxZE41QlBWMHFlYWpYUzBIemVhYlhQWGJyZW1ldUNQSXJnN1NaZ2Z6bE5tRCtraVowMFBXRVJacDJHTFpjeHpFMzN0MEpMOUovUTcvRzVkSzBEOWUySUtwTmhQc3BvYnhPQlhVOUI4YXdyUjdlV0NweXFOZlJDNFBhdU5qOEpjY08ySzNyajNTSzRHVG81WkIybytYMlNvU3hKelQ3K3ZNbTVIY0taKzdPa0ZIYktrMDdETE4vUEF2NW5sTFZUOEwyK2h2bklPZEtBbnJIKzE2SDE1Ni9DWnN6LzN5emlYRHZ1ZTBpNVBzcTFYVk9temZydktwYlhtR1RiejI5VndlZ2JFYzcvRGRaN2w1eUFyWlhBMmc3NVBLdGIzYUg1aSszZTNTVEpuS1FrMmtvWTNFQnFMZmU1K2d1YlpRRU5yUFFDRDBrQzlRZ3hjRGVwazJNeGtPSG1SVndqWmRwdlpmbVdFdlB1NytMN1pzMUtDalUwUTZWUE1kM0xVZUNlZjN3UG5oWDNZK1RoZ2YxaklMdjBjd3RJY01KaXdVNkdKNUpwdGVsbjRRdDBpSzdQaHY2T3k2WEJXcFl0bTJDbWl1ZWc4UTY5RkQ0dmVmMVRxb3hrekxPVzF2enZudEZEZlU2eXF5UzcwTXdyM0FwN1o0Ty92c0paT3pvY3RvdEtDMWkvbkpxQysrY01pZmo5alUrbTUrVUJBeG1qSm5qNjV3ZW5ES0hGMjA3bFFqMHd6UkkwejZFOGRqWmx2SFlsN1QreGY3ejJsaHU4MExxT1lmWjliVUZNeWY2czY2cnNaN2VaZlM4QURzNjJyR1NMMEorcDgwbmJsL3hac0dDeUhPdWNwcEFwb2tPK1RyTHJFNUQ3djJPRkZuUWY3bSs0MDhhUlhpWlRkWFFjN0pBYWMrRFUrWkRHRlBHazlEcStXRjIzVkFTMTlSbmlpdHIxNG9BeW5PMHgzK2JXeU44WWpkVnVkSTc2UytWeE1ZSlpFNERZRUh6dk9WeWt1NmIwM01VMHI2YXVFUC81VmpQNzRLZ09idzBSendMZVdhSkFPb2ZsMHZUM3UvMlBLN1hidHJFS0VQZDYrdlBzcEQ2WSs3ZHZIY3B5eFo1dW1xaFBkQ2VRczJPOXF5QVRwdFRsNWtpZUxGVHplVzB1YUI1dmhQUm5OcEFwNElvZ2pUdDBQdStjUnp5RExyTnBDRUY0MG5nTzlNZ1RYdGZiWHZWaGsyRTlTaWhITTlsci9Rc0RGbmE0UEt0d1IraEQ0VUdITzM1Mzg4eXUvNkpXMWllYXNBVUI4L2VsYjI5VTczUHFMNnBaL25LNWQ3YzJObElZV0w3S2swNzlGT09RYmM3MlZqZ3hUbGlQSlVvRXhrTVNGcjNlS3NrQmpjZU15YXFwLzRzQ3BuVDJoRFh2SXZNRHRYd3ZVV0QzOXY3ektFQmV3WE5Nenh0cmtNb2t4MXd1OVczcTB3R3dLZGVoWkN0WE5yQW1WdEJZZTJyTk8zUVh6a3V2bXR2NEdVVzFXR1k0L0pGa0FXcVYxNTQxY1lYbVhkcU5TdmdHaSt0S1hvV0JtN1I0UGNXTkljR0hCM3diNllaWGYrcDkzWVVOM2lPaXlFblNtSm51U3dlVGR5S0xPV1E1dXFMVSthVUtEMjNINVVFOUdxYytUYkRjYVpzTExDYnFTS0F3Wm9GV2FENnhDbno5bHlITXRJejJ4alh2SmdLMzFncVQwM09CUVhOb1FGN0I4M1R1eGkrWlBRN1ROekdNcVNkaFRNbHNWZDlpd1BnRy9XTVorcFRESmdmZDN3WkR5WS9GTjdHeGo3cG01S0EzcGk2SmloeVhCdnJpWTNWTU53eHVTeFEvV25QNDdyZnBxdy9kellTTmxKMzVzYm9KRE9uK3JPdHAwMXREQk0waHdZY0hmanZZcEFrbDUxczNuOVVqdmpjSEN1R0lnZVhFN2NoT3ptMGZWZFNxNkdOQlhLUXNrOWRaSFpaSDlPR1kwQmZER3doVFh0dnhIV0tUZXQrWHRYWWpCTEs5Y1FwNkhiS09UallrcXNtNW9RUFZkOHBhQTROT0Nob25vSWtzMHgraDRuYm1MKzBrUGxCU1J4VTMyTEgyblVLWWU4MXowL1hiZCszZEVvWFNtOWpiNE0wN2RBSHVTMFE2U2RodDNsaUhOT2VLd2tnU05QZTkvSFlYUEUwTXA5ZFZsKytGbkNwVTNlcm5UcG8vVFpMVFFTM0Y0b1ZtbkhvU2ZQWUtjZWRiRG1ralQ1Tzd5OGsvOGtQaDd2S1lQS29ubVVpRFlDN1hseTBlNVhla0tZZGV0RXZUak83cktrN0Erb0tzTmVZWEpyMnNzZGo4UlZ5cHh2Kytxc3NkWTBxNGJUNWVYcEdhTlp4a05VaFIwMjBmd3ZGQ3MwNGV1Vy96eVZvSXBpWDk4QjVVbjI1VkJMRlR4NG43a1EydXI0WG43eUxqQjZhS2dJb1ZtNnZBUG9vVlI3c05FOGNteWNDNjZScEwzNDh0c2xjOFRSZWIrNEtmMGFvejZVTkN0bHBJbWgrclZpaEdhOEttbWVVMGxUUVBHOHpSZENMeWFONmxvOHU3OFdkT2sxUDIxaHAycUZjMDR5dVJWcDIySjNGYytDNWNYbHNHMlNCS2tqSytyTnBuZUt1dXFlQ084MHJZZng1S1hWNGE1dzJ6MHZkRzZydjBxc1pnQWE4OXFSNUxpbE5wV2pQZCtBOERkNVJWL2NnK0U0OUc3d3U3OE5VV2pYNktvMXBicFFFRkRmV1BNbmtjaDZDVFlhd2E5M044YlVLUUQ2MEQyV0o0NTlOV1gvbWlxY1YxMmtzbWpzYjVsNVFVMmJIODVUNWxmN1dkNkFoUnpWOW54d0dzeGFvOGpSVEJMVU9uTHBPMDY2ZWRTeHRYT2dxQmUxSGFka1pnTmpHUGlnR0tLSlBmSlBaV0hOcXh6L3NMTGZYS2dBWmtRV3F5RFo5azduaWFhWE8zQmRTMWxOM3F6WHFubnNMSEtDV29Ia2F6UDdXOGUveVZvcVh2RlQzWXhieU9mblRwNEh3b3NQSm82QjU5N3E2QjlMTk1wUTJkaGxzK0lKU3ZNOW9yUGxKNmxIWXUvNENiQnVYeHpHNU5PMlpTKzlPUHQzdzExOXRLR3hWQ1NtNVQxS21LTm9wYStPdC9ybExzVGlnSVhXZE5JK0QyZGd4ZDVuU05PNVNGOURMWjlBY056RG9tSnVkUEhaUjM2Um83MTRYNVMvZExFTnJZN3NlMHdCbGpUVnYwdnRYZ2QzcTd6UTRaUTdzWnFvSXN1ZVVlVDd6MkdYMTVhdDZ6WnFaUTRhOW8xMkZoaDNWL1AxaVVLWExsS1k2M1l3NjVXQWhwR2xkMVRmMXJDTWRMakJLTjhzUVRZTTA3V0NzK2JLN1lHTVpIRkovQVY0a1RYdmVVakJ1MHpqb1RoYWVUcFJ3MnZ3OFpTaWdlWEcrWkhOdjl5WTFmcSs1NG9SbTFSbzBUKzlQbVhUNCsraDA4eGcwajZzdjc1UkU0NVBIKzlETkl1MkZYWXFkbVhid002V2JaYWh0N0RKWTFJZGN4NXBubVl3MS84ckVrc1prd0c3MU40NW52Y0lMMkdkY0hzZmswclRuS2E1SmJkckVPRmM4bmRTWFJYamExSms3Z2R6MmZFaHI5WlRQS3krZ0JYV2ZOTS9oL2VZNjNlNWRLWUpXQjhOZDFMZXAwbTlYR3VDZXQveGp2MGszeThEYldHbmF3Vmh6bTRuM3ljSGVab29BT0VEWG1TMTVudFRzK3RwRFhUcVFNOGo1MDFDTjNVY294MUVUM3pRdE1uL1I2UTVQVmZhVDZzdUZrbWhQUi9WTklEV3Z5V2dUNHM3a2lXSUhhZG9oczdGbTdBL1BNN2lVWHdYTVllLzZHL3RVcDh5QnZja0NsV1diSGpQL25HNzRhNmNodTNWZHlCelcybUo3THRLYVBkMFkxL0E5dnFYRGMwRERqcHI2eGxVbGpoUGlydEluNlhTN1k4ZFRkODk4bS9YdHBCcHNlWDluZTVQUnVCRm8ydUtQbEc0Vy9oN1BMSVBzR3BCTGZ6Z09lU3lZeDRENTNCMkJ2YzBVQWZDS2Nia3NVSG5adHZicUZXL2QxcFc0bGxQQ1dOVTgyemhzS09wNG5iQ1lDN1RrcU9IdlB3bmRCTTdmTzIzZXZuUnk0RlJKZERZZ2p2V3R6ZmNXMlp6UzdrVGl1TTJmNS9RY2ZOZkd4a1dmcjBvQ09qZHZ1VDk4am9BNUhENVhkTW9jcUdOdUxBdFU5MjE2WEhQZGRKRGl3VmdwQ3lVRTJFN1MrSUIybkN2dlR0ckxjUTF6MkR2dEtyU24wYUI1Q3VSMU1hQ05EWkdBWHZzRDVwbVM2RTZxYjIyKzUrdGNhcC9XdE5tZS9ab0NoTUQzdWhqUEFIK1BOWE5JeXk1Z0RvY3pWd1JlVFpyMmJNUzFwMDFCSUdPbGZPcEtDUnUvcCs1V3UrTXhCdzFiTjZuaGU0aHpRWXVhUG1rZTBtbkYyRGkwdmREc3RIbkw1UjJjSE1oaFVOeDJmVE5aYlZqTHAzSStDUWJBeHZiMTNvUWVPdXNMWXpxNzN6dStEQUZ6S0dNOEMvUi9YQzVOZS9lMkJYQ2tFTTVIQ2ZmaVBJMzFhY2RKRUlCdDIrU1YvLzdHNFNabzExRWJQeVFGOHRwKy8zSGM4VGh6aTV1WE5pZm9jUE9aUU42MmVEK2NObTllVyszWWwrclpVWTloZS9zcVRUdDBNODdzZXBGQXdCektHTThDd3pFTnNrQjFOVGFMQWM1TnIyYThTU2VjeVdQK3VnanR2c2J4VU5haVdpNXZCdzFiTlRHT2hySWN0ZldEVWtmOWE4dS8zN3YwM2dpYUZYY3VIaXVHckFiRzh4YnJtODY3dWNsb1d4a2NZc0I4cXNSaEo3R3VXS0NEOWx5SDdrNm94cnIrYndGemVOVjRkaHFjTWdkcWxnS3pBbTNkMkZidXhrejVtUlZ3alplQ3VQL1FaRGFOdUlZdkkwUTc0K0N6VjQ2RHY2U1lHdENpb3paL1dNdUJQQU8yZGhyL2NSemNLSWtzSjVGdDFiZDQydnl0RXErOWJyMXBhWElqWUE3N3RhM1N0RU43ZldGY3pPbnFQZVl4WUQ2UkNnOWViYVlJZ0liRzVmTWdDMVRiWTdPNFRyRnAvZWZCUnNNc1hZY3lObjNiQk5PdVMybnhXekY5NVh4VXZZQU9ITFg5QXpzSW5Bdm9OY3VBT1A5SlpCdjF6UTdGK3MxQzh4a2NCTXpoc0xZMUxqeDhVaExRbkhRNjlWMUhQLzViOVJtblY5NEFyNnZIVHBrRFRZcnRqQ3hRN1lucnE1dldLZWFLSjh1NTYzMGg5MmJxYnJYT1dtN2V6L1VzMVYrZ1pVZGQvTkFPQXVkemFWN3FsOTVsZmE0a3NoOGd0MUhmVHFybllhYTBhNnRiY2JkbjA0RUNBWE40bmRqbTNTa0dhS1FmalAzVDU0NSsvSmZ3ZE1MY0FnVzhyaDdIK2JmRldLQlJza0MxYnR1cFIyMSt2a3E0TnlkcERrQjd6dFBhUHMzTmFRODlESFZUOVcvYVZPaklVVmMvT0FYeS9oM2EyUkVhRzZpNTIxMDdaVnJPUkRMZXE2WUQ1eCtrOWltbWJnbVl3K3ZiVlF0MDBJQ1VJYXFyZ1BsdnNYOFVNSWRhdkEvTlowMENXR1dCa3FhOStURmFYTzg1M2ZEWE4razk4K1JaUjVhRjFCSHo2L2JORlVGalpnZit1eGdya3pVWk9uVFU1UTlQQTl0SmFDZHdmbUhIV3EyRDVWaVdVdTJWTlVpT0E2R21ONm9ZYkwyK2JzMjJURVRySUdBTzliV3JpeUJOTzlUWkI1NTFOSmFJV1NOK3Rwc2ZhcXZMNCtBZGpFQzc0aHhYbXZibXkzaVR1ZUxKWGduajNIT0hjVm9YVC9nYnM5VS9Gbzd0NWFGeEU1dTRvV05IWFY5QWVsZmdKTFNUNHZSSzUxdEx3eS9WWHFGYTJLaHlLazM3cStwV2JKOCtOUGdqZmhVd2g5ck5nalR0VUVjZkdQdW4vNFQyVDZiR1V6ZG4zbDhPdGZlTlRwa0RyWkVGcWhXYnl2Y2hIZElnN3pxeUtHVGVLb0Rid2JqTmEyMGJHUXNmNGxOYXV3YzZkSlREUmFSRnFoZ3MrdGJ3ai9vclRidU9vSmFHM3lKSXVRUGwxVWFWcHVyYkIrL0UyVjlxbDVvY0dQMXFJZ3VOdEtrVzZPRDFmV0NzUTIyblpJOGJDR002OXJkMjhrT3Q5VG5PNnkrVkJOREJ1RHpPcDc4b2ljYkdhcHZXQVFWNHlqRXI0Qm92cmR1M0x0WnRteFhxYXk5aldSNXl5dnhiMVkrNUQ1Q0JvMXd1SkMxV1RWb1k0TWEweDNPMy9sVUQ1WGRLb3ZqSjVDcHdmdFBRajdnMnlOM2JQRFR6eW9NWUZQaFp3QndhYlZNWFFacDJPSFJzT1F2dEI4emorT2RNT25ab2hIb0ZkQ2tHSEdTQnF0OVV1OThMY1lQRFF5SDFtSFo5U0svWDRYVnoyMWlHc3dQK2FleTNKa29ROG5DVTA4WEV3SGxLSGZ4Ynd6OHF2dDk4N3ZidjNmREhlL05aU2ZSRHFtK3hRMjVpbzByY3BiZ1FPTis1YnNWSjVrVUQzenBtRTVCeUZ0b3hDODFueklFKzlYMXYwbmo4UTRzL2RuVzZmRko5bHU0Q05ESmZQRmNTUUZka2dXcWtiUjl2YWR1L1dXOG9ybjdNQzdoVWRiZ2JEa0M5WHF4ZisyYm5qWE5VMmM4Z0kwYzVYbFE2OWZGTGFIYjMyMldhMUxQYklEbVdsWUI1UHdmTjhkNysyc0MzbHRWaDk3clZSUGFHdUJsQ1VBRGFhMHN0ME1IdWZWOU0zN3dJN2Fad2p1OHVIenRkRG8zVjY3aklxbjRCT1l6TDR4aERGcWo2YkR2MXE5MHZUd24zN01TYWZTZmlPcTREVUllUGhXZmhzTTJqRTV1UElDOUh1VjVZR3VTT1EzUHBvNlBQT3VHZEd2MDRvQkl3Ny9la2NsNTkrVG5VbjhaTVZvZnRkV3ZhVU4yS3AraW1kaWxDNjIxcG5PaDhWQkx3WXQ4WHgvbW5MZjNJbUFIaUYrOHVoOGJOd3Y0bmF3Q2FiSk9rYWEvSGRNT2Z4NE5PM21kZTNweDFHWjQyazViNjNORXNnZlBENXJodncyRVoxSDRWTUlmOEhPVjhjV3ZwbzV0Y2dCWTQzOXpncjlKbWVvZjVNQWJPc1pNK2EyRHdmQ2x3L216OWl1MU8zUUh6dUNqd3MxTjAwR2xiT2d2U3RNT21jZVYxNnZ2YUNLekZoZHk0Q0hHV051TUN6ZFh2TTNOR0lMTXh1U3hROWJUdjB5M2p0bXNiRW90VndwclJlUnBmREZXWGRTc0d6cGNETC85OXg4SHpBLzdwcitrUUc1Q1pveEl1TWkxQU4zRUtkdVZ6U3FIQjN3MytPTFNmTnBNTUpwYnhKRmIxUDM4TDliNGVRZUQ4bnhQUHVnUG1jYk9EOTVkREhxYUtBUDdSN3kycnowVUxQeTZPWCtLRzI3RkZDR2lOdWdaa1I1cjJ4dWMxTnV1WFhUZEt5TVR3ZnNDM3FldTF2YmhaWnVHZzRZdnozTlZyeC9iZEZDNWdEaGs3S3VWQzEwN0JOalhnL1NDbzk3OEcvMjNxbkUrVnhtQUgwSEh5TXduMW5wYU1nZlByb2FmNHFYNy9PT2l2TTJBZWd3UC9sbllXc2h1elNOT09NZVZvTktrK2k5RE82ZkwxWVBsTW53aXQxZk9aZVNPUXNkaEdTZE4rV1BzK0RwdmZ6L3ZOaHYxZTFJM2NYVW9UM3FrNGYvdHNMWGRqRzNsSXdIeVZEVzJ1QkNGZlJ5VmRiRG9GR3dOT3Z6UTA2STJkOFcwYUdBNnhzVitsemZ4anh3WS9ua2Irb2hyMVU1d0F4WlNtb2Q3QVR6eGh0aGh3SFl1RG90OXIvSlkzNGVsMHVmZUlRWDV0YUZ5RWtLYWRvUzRnakZPZjkyZll2TmhhRjhGeTZLNnV4N25DQnlVQlpEd21qK09DdDByaUlOdE8rVHBsWHI3clVHK0d5UzZlUTE0dnhsZGVlazFuWE11OVRZZnNDSzhLbUU4RXpDRi9SeVZlZEVvalUzY3diK1YwaUIxQituMlhZYmUwbWF1VHJWZlZaeHFlTmpFSURQUjNramtMVDY5SCtLYU9IVnkvWXZBZzdzS3U2M1VIcTUySmNiQzE5SlJDdHFhS2dJR05KMWZCOHYrRzVsL3hJMWdPM1pzckFpQjNza0RWUHBlSll6QWI5OHV2Ri9lRjlPUG0xQTNPcGFybllKeGUwL2xTRzNsU2ZmNUlwODdIQTUvenhtZHlFZllMbU1jMTlZa01IVkNHbzFJdlBKMDZuMVgvODEvaDZiUmxuWTVUUjNEVjkvUWphWEV6TnZTN25pNWZOZkxYYS9kaWtVNGsxLzBlYkRLYVpOWjhqMWQxYkQ2QU9oWjN4ZGI1dW9PWTNjRjdXcUdRdGpPMW05RDNoWU5KaThIeWVCb2liaHg3STFnT25kYjdXWkNXSFNoblhCN2JMSWM5ZG0vanAySHpHdUcxOFZkdmxKQXg0TVI3dFdzWDF4WFBVcnU0M2tiR1EzRXZyZm11VHAzUGhwYXlQV1hvalhWbTMxZVB4YmlWZ0RrVTVLajBYeUNlc295bkxhdi8rZTlRZjhyMmQ5Vm4yY2ZPT1RYMDgvQzB1TGxyMnN3djJ4cjU5QjdzY1pDeXZjOFR6WGlQejJxOHg1ZWhwNmZPMXphay9CN3FlWTlybk9EL0VyTTdtS0JDY2UzbWpaS2dwMlBKOTlWbkdaN1NzRGNkTFArUytrRWJ4NkQ3K2k4dE8xQ2lxU0tvcGF5TXcvb3pWNDNqK0svcTdtRGNoTC9YRlpmUFBBK0w4TFN1LzlJemNaekdnY3VoYkdoWVM4ZiticzkvK2pGbENiV09Dd1U1NnNzdkVrOCt4MFcwOEpST3BNN1R6ckVqK0J5RFgvRVVUUThhK1RmcFZFRHNISGRkM0Z5bFkzOHhXSmN5QU1RT1U4cjJIZytxMSs1eEhZR2dWWXFmUHRXeEdDVGJaMFBLUy9YdnQzalNQdzFnZ2ZKTWcwd3M5R094SVBaeDA1aVdyL3EvL3hlZU5vYWROUGdqNDFneVptdjRmMmtjcWgrRUROcUJJQzB2VUNCcDJuZHU1OGRoODFyR25mRlk3NVJ3MnZ3OEJTMDV6UG9ySGhjdnRKUDNLVjM3djhQTGF4aXJtTWt5YmFidTNjbnp0VFhlLzRUOU1pekZzdnRsL1RRL1VJNmp2djFDcVRFYWgvcUQ1M0hBK0dlcGdiMjFkMHpHQmM0UFlmZVRyM0YzMlhnOUhmdU85MEhLOXY1UE9CY3B5OE92b1o0c0Q2czZOaTl4TVB6RGhwUjNOWHpMOVhlMVhubmlvT2oyTXJZTEprdVV1bEF3U2VuM0Zta2NHZFBSWFRUNEkrT1k0bFAxK1RsdEdMdXlNeCt5RXVlVUo0b0JLSFJjSHNma0RuaHM5MzdMMzFtYjZGK2RXSVQ2TTdlMi9WeXkyV3BkY2I3bmN4SGpBT093VzZiUk9DNk1tNm1YNlZXMzR4N01nVit6eHJ1S3BTdzhmbENtb3o3K1VtdnZPeCtIWm9QbjB3SWErR2xhNU56M0haTnh3QlJQbDc5OXpVS2xsTzJER0dEUFU1YUh1b0xuOFRuOVR3bDFMTld6c3dNM3BHenp2L2NMQ1JSQWI5cEthZG9wWVhFZ2JySjh1d3FTVjUvSDhKUjYvVU9vSjN2S3RuSG5LbEFlRnhqZWUrY2JaTmxHeERuMmhaSUFDamRWQkFlWHoxeng5TktzZ0d1OEhObzd0RjhwQm03LzlacDF4Uit5eWU2eWxoSFhRMk9BK2Irck5kM1M3dGtQd2ZKOTEzaHJpYVVBM1R2cTh5L1hRdkE4cGlDNXorMWtiRnJzbktjRy9uUFlmNUV6bHRYWnZxZkxkK3hrN2VqdGIzMnJPM2krWHNldU1xdGo0NVI2S0M3b3h4UTlkYjNIOVVzYTFENzdmaUdnZU5NZyt3cmQ5bCtUdGM4c2ZhN1hBdVJ4aytVZm9ma2dlVWhqd2pqbUZDaUhNdHFQYWZBZWM2QUgwbmpqTnlXeHNhM2ZGQ1Q2SWhEVVc5ZUZ6Rk9kTm45WlhJLzlKUVZ1bHpXMW1ZZGtHdjFyVFRjOG5UNlBjWk8zbWJkOVoydXhsRU1PUk1VTjRMWEZVb0NPMjRTcU1nOXhBRGdMemFTVWl4M0hJZzAyRm0wTkpsUGFrOWo1eEE3c05Udi9ZOEJ1MW5Td0xnWWIwejNZdVFPcXJtbWt1cXByYVJCL25lclpvcTNBY3RvWmViWld6MDVyL3AzaUNkUzVRSG5yeitnaU5COFVhdHRINzB6Sy9ybUxmZUR2K3J0bnl5YTJyMzk2U25wck5VNXV0UTlIZmFSM2ZwSHVVbnZqV2FXRitlQk5DaEtaeXpiTWV0L085L3hSS1F6bk9VeW5uZmZackJqWEZtZHR2TjR4cmZmR24zTklwczJ2YVQ1NDNmVjhNQjNPaXI5TFhPczlkTzA2bnNCMzhFbTd5b0gxSjlleDFrOEQ3QVRuMVpkNW1wakZodkd5eG05L2tyN2ZaYXA0OFFUTjdmcm50WUgwRkNDUG4zajlaK25yYTlOQjM2U09kZEhTUGJoS3U3ZXVhaTUvOHF4cmNmRHh2cVlKM2ZFUGRlenVoenAyLzlybk9BMmEzcVM2TlU3MTdMU0JJcm9MZndmTDdkYUc0YlNOVjJrTUlyMHRmYmNlSkw5MWlod0F5TXcwUEswakhDc0tvR0R4RU56N3R0WVc0M3B2ekZZV25vTE5zN0Jmd1BraWZYNWZXOU5kelJjWFRWNTNXdStkckgxZTAvYTNHa3NCMnZYVFVIL3gxS2d0MG9tdk9GQitIK28vZlg2YVBwZHJEZlNxWVEycFkxanYwTzdUbjQzVEoxcWRjSTNxM2tYYVdRT2ZPdkxwV3ZEOFZIWHNiVjJMQTZucnRPRmpWZC9xbXBTZXBNL0ZEM1VzaW9PdjVSN2ZxNjFkMm5GWDVWektIaGkwYVdxZkxORFJGdzloYmNFalBDMTZMQlVMQUpDck9GWkpwemwvVnhwQVpuWUpnTWQxL1U1ZWNaWFc5ZWZoNmJEVU5CeVdhZlM3TmQyMG5oc1BJQzdUbkhLNSt1dzZ0MXc3YkxpS3A2eitmMTFydm9MbE1BQS9EYjBBVWlNZmc3WlhOYVhsMk1YNUQxL2Ixa29hOWgzTFAzWXlaNGVrYktlOENXbDRDcHEvVHdPcXQ2SFprNVluRGRmamZYeExnOGxyUVFRZ2pqMVNPL2lIMHFBd3ErRDRNbjNpT081V3hoUUFvTkJ4K1ZYS2puZXVOSUNNYkF1RXgwTkM3M001alBORFZ0KzQ3dnVhdGQ3VkFjVHZ2c2NMQjZSaVBLZkplTUxxVmFFemE3b3dERDhwZ3U4YStkdndkMUN2clFCNlcyS25FanV4cXh3WE5xVnNIMXhkV3cybzNxUTYxblFBdmFzNkZ3ZFZjeWxwZ1dmYXdaaUI0MnVRcHAzOCtxN1ZRc0FpZmEzbDlTY0FBSm1hQm1uYWdmekY0TzFmQi84eVhkdVA4OFZGT3UyOWVsVm4zVEdWTmc5SWZVdmxmVzJUT0F6THFLcjBTdUdsUXZxN3NaK0VzaGEzVnp1aDVpVXRkS2FkYWQrbGJLK3VmK1JKN0gwOVd3K2dUd3Fkc0s1T2xDOEV5b3Q0NXFiaDcxZGg5TVZDWUt1NGRtKzUzdDROdWI5TDQ2MnBKNk5SUDc0YTZLOC9zd2lBK2toQjVrNzVhRzg4cXpUd0hNYmd6bnFhOXB2cS9rM01aWnRYbGZQTUU3alRQVmRPQTNvTzA5cjRuMnQvbEUzVzJEMS9qOUlPSmNvVXFsMmxQY3Qwc0RLL1owUFEvT0NPSzM3T1FuN0J2WGhDYUpFYTkrc2VsUE5xOExMdzVBMjJuc1ZQcnFuU3ZxWDY5dGRIMEFFNG9LMkxrOGMvMXZvN204UUFBS0Q5Y1htYzE2L1dIcklPbWdPOWI0OVc3K1NPN3Z0d01DY0YwRmVIcFU0enVheDQ0SEFSL282bExEMTlnS0I1UFkzK09IVmtxeUI2L1A5dDdaNWFiOXlkYnFYUDlXeFZ2MVoxcmUwQlZ0eVFjcHMrc2I0NW1RZlUxYjdGVFc1L1piSVJOQWNBZ0U3RzVPdFpvQVROQVpwdGJ5Zmg3M1hldGc1THhjTlAvMXZiRlVjQm5tMmpCTTBiN1FCaXc3KytNMncxNEk1L3RtL0FiL1dPeWRWbkVaNVNHQ3lWTkFPdVkyZXBQazErcUdQamNOakdsWnYwZFZYUHZNY1ZhR3ZDR051Y1kwRnpBQURvYkZ5K3lnSWxhQTdRYnZzYjEzakg0ZS9EVW0vQ1lldTdxN1hkMWF2SjR0ZWxBRG13YzNza2FKNVZ4L0JtL2M4RTZxQzIralVPLzN6ZjE3MEJFNUJiTzZYdkJ3Q0FUc2ZsazJDOUFDRFg5bm1kQTRWQS9XMk5vRGtBQUFBQUFBQUFRM1drQ0FBQUFBQUFBQUFZS2tGekFBQUFBQUFBQUFaTDBCd0FBQUFBQUFDQXdSSTBCd0FBQUFBQUFHQ3dCTTBCQUFBQUFBQUFHQ3hCY3dBQUFBQUFBQUFHUzlBY0FBQUFBQUFBZ01FU05BY0FBQUFBQUFCZ3NBVE5BUUFBQUFBQUFCZ3NRWE1BQUFBQUFBQUFCa3ZRSEFBQTRQK3pkOGZYVVJ2dEhvQ2xjL0kvM0FxOHFRQlRBWnNLY0NyQVZJQ3BnS1dDUUFWZVZ4QlRBZXNLWWlxSVhjRTFGZmpxL1R6TDNjOWdzSzJSTkpLZTV4d2RReEpyUnpNallmS2JlUVVBQUFEQWJBbk5BUUFBQUFBQUFKZ3RvVGtBQUFBQUFBQUFzeVUwQndBQUFBQUFBR0MyaE9ZQUFBQUFBQUFBekpiUUhBQUFBQUFBQUlEWkVwb0RBQUFBQUFBQU1GdENjd0FBQUFBQUFBQm1TMmdPQUFBQUFBQUF3R3dKelFFQUFBQUFBQUNZTGFFNUFBQUFBQUFBQUxNbE5BY0FBQUFBQUFCZ3RvVG1BQUFBQUFBQUFNeVcwQndBQUFBQUFBQ0EyUkthQXdBQUFBQUFBREJiUW5NQUFBQUFBQUFBWmt0b0RnQUFBQUFBQU1Cc0NjMEJBQUFBQUFBQW1DMmhPUUFBQUFBQUFBQ3pKVFFIQUFBQUFBQUFZTGFFNWdBQUFBQUFBQURNbHRBY0FBQUFBQUFBZ05rU21nTUFBQUFBQUFBd1cwSnpBQUFBQUFBQUFHWkxhQTRBQUFBQUFBREFiQW5OQVFBQUFBQUFBSmd0b1RrQUFBQUFBQUFBc3lVMEJ3QUFBQUFBQUdDMmhPWUFBQUFBQUFBQXpKYlFIQUFBQUFBQUFJRFpFcG9EQUFBQUFBQUFNRnRDY3dBQUFBQUFBQUJtUzJnT0FBQUFBQUFBd0d3SnpRRUFBQUFBQUFDWUxhRTVBQUFBQUFBQUFMTWxOQWNBQUFBQUFBQmd0b1RtQUFBQUFBQUFBTXlXMEJ3QUFBQUFBQUNBMlJLYUF3QUFBQUFBQURCYlFuTUFBQUFBQUFBQVprdG9EZ0FBQUFBQUFNQnNDYzBCQUFBQUFBQUFtQzJoT1FBQUFBQUFBQUN6SlRRSEFBQUFBQUFBWUxhRTVnQUFBQUFBQUFETWx0QWNBQUFBQUFBQWdOa1NtZ01BQUFBQUFBQXdXNy9wQWdBQWdJZXA2M3EvK1JMSG9qbVc2UisvK01XM1hUYkh4YzZ4YVk3ejYrdnJLejM2NFA1ZnBQN2ZIay92MGYvaExIM2RwREdJL2ovWG4vVnlaejV2Ky9PWitRd0FBTUJzL203Yy9JVldMd0FBUUdrL3FOZjFwcnBmQ0pqVDErYllEUkN2MHU4dnFwbUhpODE0UkloNGtJNWxjenpKZVBvdjFVM2d1R242K05Uc3Y3UC9senY5djVkNTNwK21NVGlkUStpYkZoMXMrL0psNXROdjUvTzY1R2RHeTJmcysrYmFWZ08wT1JZMC9ET21OcmVjbzRzMFIrUCszOS81MS9kWjFORzFzNlkvbDU3T0FBQXdIWGFhQXdBQVd4RUUzdzZSdmdWcWRWMUh1TGlwYmdMR3VZU0xFU3dlVnZtRHhWM1AwdkVtOWZHNk9UNDAvWHN4OXdtWmRrQkgveDlVZVJjcTNKNzNyOUp4M0h6bVNYVVQrRzRtMkovUmwwZFZ0NEhqN255K1RQTjViVDVuc1o3Qjg3YUxoVEVBQUFDLzVKM21BQURBZlVXNEdPSHhjWFA4YjEzWHB5blVuSlRZMWR3Y3ErYTRhSDc3ZDlWdFlQNmpQbjdUSFAvR1R0Z3A5dTg5eCtDd09XS1g4dWZxSnN4KzB1UEh4K2Q5bmtyLzc4em5xM1R2OXJsRE40TFBkMmsrcjlQdVlSNDNqcXRxK04zVlhWelhJczJOcS9TOGZWVUp6QUVBZ0FFSXpRRUFnTWVLTVBuemxNTGQ1anBpRis1RmRSUDBEUjNjdkpoYS85NmovNWRwc1VMZjRlNnYrbjkvcFAyNTJwblBUd1p1VG9TaC82WUEvNm5INTRQR2NUK040WlN1YVpGSzVQOWI5Yjh3QmdBQTREdENjd0FBb0sxdHVIZzYxakJzSjZ6OXF5b3Z2Tm4yNzNxcVlXTUswS0xzZit3czN5dXcvLzlKQWZUWTV2TzdBdWR6dE9sOHJsVVVIbWs5c2ZzOTdxVi9xOGUvVXg0QUFDQTdvVGtBQUpCTDdEeS9HRk1ZbGtwWGY2aktER3R2ZTVYNjkyQktreWE5Wi91ODZyY00vbU84aTVMeEpaY1lIOUY4anJaOVRtM2w1Mk82cWlaU2xqMHRqb2w3L1oyUkJRQUFTaU0wQndBQWNvcGRyWjlURUZxMFZQSjRVOTI4UTN4TS9mdDM3RG9mKzBSSkFXOWN4M0UxbnRMTUVWNmVsN2h3WWFUeitVM3BDeEVLR05OM0U3cVc4MnFDNzJVSEFBQ21RV2dPQUFCMDRiams0RHkxYlZPTk44QjVsY0xHc1piRGY1cjYvOVVJbTc5ZHVIQlVVSDh1Unp5ZnR3c1I5aXR1VzAvaEluWVdkSGh2T1FBQVVDeWhPUUFBMEpVaWcvUFVwakh0YnI1TGhJMmJzWVdOT3dIYTJIZWMvbFhDanY4MG56K1BmRDQvU1hQNXNHSTdycXNKM0NOVnFpS3dxUVRtQUFCQTRZVG1BQUJBbDQ1TENuVjNBdk9wR0ZWd1BxSEFmT3ZWa01INXhPYnprNnJ3Q2hVOTN5ZFRlZS8zYVNVd0J3QUFSa0JvRGdBQWRPMjBoRExpRXd6TXQ3YTdkQmNsTnpMTmdYVTF2UUR0MVJCQjc0VG44L0ZZWHp1UTBYb0tGekdWM2ZJQUFNQThDTTBCQUlDdTdUWEhhc2dHVERoZzNJb2crclRVc0hIbkhlWlRETkJPcnErdjF6MzNaK3hFL2pEUnVmeTY2YytydVQ0c203SDlVRTJuTFB1N0NnQUFZQ1NFNWdBQVFCL2VETFVUT2dXTXh6UG80d2phVGd0dDJ5U0N3Qi80MGh4SFBjL243UUtFS1phOGZ0djNBb1NTTkdPN2pHZmxSQzVuNVk4OUFBQmdUSDdUQlFBQVFFOVd6WEhZNXdmdUJJeGR1MnlPODNSVTZXdnNsbDJtM3krYUk4TDdyb1BqRjFFUytmcjZlbFhLb0RmdGlWRDVWY2NmOHpYMStYYXNMOUlSZmI3ZGZiOU00N0NYY2N5WEEreUs3dU1kMGJmbjgyYW5ENnZVcC92cHlOV1cyTEUvMWQzejkzMVdyU2R5TFlzZTdua0FBSUNzaE9ZQUFEQk5menp5KzViVlRiQVlYL2N5dHluZS9YelVjOGk0cnJvTEdNL1MrVGZOTlYzYzhkOXNkbitUZ3JHRGRMenNxRjN2bXMrSk5tMkdub1FwUEZ0MWRQcXZxZi9YemJXZTM2Zi9kOW9VOC91d09WNjArT3lEdmdQenRBRGhSVWVuLzVMNjgvUys4em0xYVQvMTVVR0xaOFpaODVtSE0zOW1yenA0NWc3bG9NTm5ic3pCdU8vT001enZzeDhWQUFDQWIzKy9iZjVpcWhjQUFLQzBIOVRyZWxPMUNNZWFuL1ByREcxWVZEZEJUczRkZzIvNzJrM2E0WHZNVDZKZmZoSXNEdG0vVzVkTit4WmpuOGQzaU1ENktFY1o3eFpqOFB3blFYMVhmUmx0amMvTXZRamtMTTNuVFlZMlJsajYwR0Evd3ZybEFBc1Eyc3pOOXptck9hU3k3RjBIdU8vN3FrRFJYRS9NMDF4Vk5TN1RQWHFhZTQ0MDdXenpQOFJpb2NmU1R5c0FBREFkM21rT0FBRDhVSVRDYWZmbjc5Vk5zSmJEWVI5dFR6dTZjNGZ6RWU3OUVYM1NOakR2c0grMzlxSk0rNUR6SnkxYXlCMllmMnlPUmE3M1hqOXlERjczSFpnbmNjMDVBL05ZZlBCbkJIKzVxaEkwNXpsTlFlTHJkUDc3dEdHSUV2ZkZtRkpaOXAzcnlSV1lmNHpGUDNHL3ozbU9BQUFBL1JDYUF3QUFQNVdDeFdWMXM4TzZyV2NwVk9uYXFzb2JNRVo0czk5RnlmT2QvbjJiK2RSSFBmWDF6OFlnbDIzQTIwbDUvMXRqOExPdzkzMnV3UDRoMGs3a25Bc1FZZ0ZJek9mVGpwNFowVWVMNXZqMGl6RmRDa01uVlpZOUxET2RKeGFuSFBrVEdBQUE2SXZRSEFBQXVKZTBJL2RMaGxNdHUyeG5LbVA5SnVNcGV3bHZVdG42NTlYOWR1amVSeXdhK0RERVhFbTd6SE1GZ2R0dzliU25NVmplTWM5UCtpcHYvUU01UC9jazllZEZ4MzE1MVJ4UnJ2MzFIZi9KNFVBNzlvdVJGa084bWRobDdXYzR4OGNoRnFjQUFBRHpKalFIQUFBZTRpRERPZlk3YnVNcTQ3bGU5eG5lcEJCeFdlVUx6bDhOdE5zODF4aHNBL1B6QWNaZ3QxejdXVm8wMHJ2TXU4eFAwdXNGcm5yc3o3aC9iaThHZWQzSElvaVNUYTBzZThibis5Zk16M0FBQUlCN0Vab0RBQUQzbG5hbmZtcDVtczVDOHhSRXZjcDB1cmREN0hiY0NXMXo2YlhFY2NaZDVyMEg1anRqY0xYelNvTFlkWDR3NEcyWGEveSs5RDBYYnMzcC9kUUd1NGh2cktwcGxXWGZhcnRJeC92TEFRQ0FRUWpOQVFDQWgycTdRN1RMbmMrSG1jN3pLWlhxSGtRS0dWOFgxaWQ5Zjk1cTZQTGRhWGY1WU8vZFRxOGFlSm5oVkxFQTRXRElNREl0dUZsNlQvVmt5N0tYOHVjTEFBREFvd2pOQVFDQWg5cTAvUDR1US9NY2dkeGwxWC9RL0oyMEcvZFRobFB0MVhYZHkwN3BGUExtS0NWK051U2loVnZqTU9TdTExempkdFQxTzh4SDBKZEZtSEJaOXExRnkrOC9yd0FBQUFZZ05BY0FBQjRrUS9qMnJJdDIxWFVkNVo5emxEcytLaWpjaTBVQU9kNXYzbGQ1OFZ5ZmMraE95OVlQWjhxaEYyVlZUYk1zKzFhcmE3T3dBZ0FBR0lyUUhBQUFtSXJERE9lSWdMR1k4c0JwZ1VLT0hkZGpDczFQU3RnVlBiUzBhei9IQXBPVlIwTXhZN3FzcGwrVy9ZdVJCZ0FBeGtob0RnQUFUTVV5d3prK0ZIaGQwYWEydTgyZnBNQ3VNNm5zZEk3UzdDdFRPZHQ4amtVZ0cxMDV2QXhsMmMvU1VUbzd4UUVBZ0ZFU21nTUFBSDI3ekgzQ0ZFaTEzWlY3V2RJdTg2MVVybmlkNFZUTGpwdTZuK0Vjbit3eXp6cGVhOTFZakZYMStOTGxzV2ptY0E2ZGxGNnpBUUFBMER1aE9RQUE4Q0FaZGl4ZmROQ3NIRUhMYWNIZHZpNmtqMzVtT2ZFeDZGdmI4ZnJxWGVaRlBUUGJsR1ZmaldneFNkdDJMczBZQUFCZ0NFSnpBQURnb1E0S2JOTXl3em5XcFhiNDlmWDFlZFYraDM3WG9mblVGeTcwclczbGhJMHVIRjZPc3V6Ti9mOWhSSmQ4MGZMN2o4d2FBQUJnQ0VKekFBRGczbElBZE5qeU5Kc09tcFpqVis1NTRkM2ZObERlNjdoOWk1YmZmNVpLMGJ2UDhyeC9mcU1uaTdDcTVsV1d2ZTI4MjJ2bXYrQWNBQURvbmRBY0FBQjRpRlZ6UEdsNWppN0M2YWNGdGltMzFtM01GTWJleGM3b2ljMFhXdDl2VVpWakxtWFovNk5wYjQ3N2VPWGQ1Z0FBUU4rRTVnQUF3TDNVZFgxWXRRdUF0cm9JODlvR0xKc1JETUhVUTlBTGQ5azN5N1lueUJSZTh2am41ZHpLc3UvNjFQTDdZMkhXSmkwNkFBQUE2SVhRSEFBQStLVVVtQjluT05XWGpuWk90dDM5WG54WjhFemw0eGNkelk5bGh0TmN1Tk95K2FvTEJyZHU4VndhWTFuMlhhY1p6aEY5OTNmemJGazN4OEowQWdBQXVpWTBCd0FBN2hTN0pac2pBcERqVEtkY0YzcXBjeWxsdlRDclowRnA5bUdmbTdGRCttV0xVNHl1TFB1dXB1M3huTSsxY09OVmMvd2JmdzdGdTg0N2ZzVUVBQUF3WTcvcEFnQUE0TFlVK215UEp4bFBmYXAzVzdsc2pyMHBYcGh5NGt6azJUbm5zdXk3NGhyZVpUemZ5M1JFSDV0b0FBQkFka0p6QUFDWW9McXVONC84MWdoOG5uWFVySk14NzU0c1JQVGZubTZBWXEycitaWmwzeFdoK1ZHVmQ5RVZBQUJBWjRUbUFBQXdUUzhLYk5QS3NFeHlYTE9JOXhaYlZNSEk1L0NzeTdMdmFxN2pxdW1QdythWGY1c1pBQURBR0hpbk9RQUEwSWVQaFlkQmk1bU13NVV4bUlXbnVxQmZ5ckovcjdtZWVCM0hKN01EQUFBWUE2RTVBQURRdFhnUDk2cndOaTVLNzhRVXlyVjEzbEh6emszem9qelRCYjFiVjhxeS8waGMxeGZUQXdBQUtKM1FIQUFBNk5wQmxPcnQrRFBhaGpMN0krakhZdHVZYVh5WGJwVnZMdHFlSU1yZDY4WitLTXYreTJkRDlNOVhNd1VBQUNpWjBCd0FBT2pTNit2cjZ6NTJJYmNOYmVjU21uYzVGbDluTUFaOXVTaGt2dkFMeXJML1dsb1FFUFBSam5NQUFLQllRbk1BQUtBckVaaXZlL3FzdG1IdzNnaDI1aTdibnFEakhmL25RMS9maEp5WE1GKzRsM2pHS2N2KzYyZlBSWnFUWjZZTUFBQlFJcUU1QUFEUWhUNEQ4NUFqWkR3b3ZFOWZ0dnorczhMSDRFbGQxM1pIVjk4V04zeWQrSHdlUFdYWkh6NnZtMlBaL1BKdHBWdzdBQUJRR0tFNUFBQ1FVd1FoejNzT3pFT08wUHl3MUU2dDYvcXdrRDZhN1JnTUlFZjFCSXNRdXJzbmxXVi9wSFRkTVRjL21Va0FBRUFwaE9ZQUFFQXVKODJ4Nk9rZDV2OGxmV2Jibll2UDZycGVGdHEzaHhuT3NlbTRqWnRDcm5NcWN2VG5rVzdzekxwU2xyM05NL3VpT1dLbi92UDBad2NBQU1DZ2hPWUFBRUJiVWZiN2ordnI2OE9PMzVuOUs1c001eWd1WkV4Qi9vdEMrdWRPcWN6MFpjdlRQTW0wcTM0S2NvelhRZG9SVFY3S3N1ZDdicHpIbngzTkwxL3JEUUFBWUVoQ2N3QUE0TEdpdEc2RTVjdm0yQlRRbnRNTTUzaFo0Rzd6Vlk2eDZtbEJ3NmFRNngyOWRFKzFyWjRRTzZIdE5zL3ZXWXZ2blcxWjlydWtoUjN1ZXdBQVlGQkNjd0FBNENHK05NZmI1dmc5U3VzV0VwWnZuV1k2VHpHQlZsM1hzYVAxUlVGOTA4Zm54THU0VjI2MWJQMzVydW5QaGE0c3d1ekxzdDhoN3ZjOTNRQUFBQXhKYUE0QUFOd2xTbTFINmZYM3pmRm5jL3pQOWZYMWZ1eVNMTEcwY05wSi9TbkRxWjZWRU5xbTNaZnJES2VLb082MHB6RTRyZHJ2amc1SHpmWHZsekN2Qmk1dm5tdmMxcVhjcHpNUDhKVmwvMzQrTEpzdmJ6S2M2a3ZUdC9WRERyMFBBQURzK2swWEFBREFKUDNSNG5zdlJoenNyS3QyN3hyZWl0MjU1eWtFSGtwODlwTWM1K241WGZNeEJtMURzTGp1ZFFScVBiZjl2NlNkL3RHT282WWQ2NzQvUCtaZjg5bXhlS1h0THR3WHNSQ2tPZDlxeUp1emFVUDA0VElXUkF3NXJnTlJsdjM3K1pCcllWQTQxS01BQUVBYlFuTUFBSmlnd3NxbTkzbmR1VUxHc0ExdHovdStqaFF1dnNoMHVsWFB6WTlnTU1mTzBXZnBYSWREektWbURPSnpqOU52ajV2Zlh3MjBpQ0w2NEs4TTU0bUZJQmREaFA4NzRlaDJRY3RtNkFVUlBWT1cvWTVuYktabjlmc2hudE1BQU1DMEtNOE9BQUJNelNyVGVXSzM4NmJ2TXVFcE1IK1Y2WFNmK3E0YWtEN3ZKTlBwWHFYK3FBWVlnK05iLzNnOVVNbjRhTXZYVE9jNlRvc0IrdXpMNkxOTjlkOFZJSjZsZSt0cE5RL0tzbjgvTHc2cVBGVkJ2Z3hkUVFFQUFKZ0dvVGtBQURBcGFTZnRaYWJUYllQenc2N2JIUUZpNXNBOEhBMDBES3VNNTRyZy9MU1BnRFVDM2lqTGY4Y1lETEtJSXUzR3psbld1N2ZnUEgzT3Byb0p5VytiUzNDdUxQc1BubldWc3V3QUFFQmhoT1lBQU1BVTVReUxJeXlOb1BGRFZ3SGZ6bTdjbklINXlWQzdXelB2TmcreEk3WFR3RHJlK1YzZEhmRHV6b1hOQUR2T0kzVDltdkY4TVovWEhjN25SU3gwcUc1MjZ6LzV5WCs2TGNFL1ZjcXkvOWo2Ri9QaXZwUmxCd0FBc2hHYUF3QUFrNVBlUFgyVytiVHhudTZMbkx0MFU3aTRibjc1VC9YenNQYWhJcXc3R25nWWpxcThRVy8wenorNUZ5L0VlTWE3dnB0ZnZxdnVGK1J0Zy9PblBjN25xdzdHODFVSDgvbHBXbndRUWVaOVMyOFBVb0svSjhxeS8rQitxNVJsQndBQUNpUTBCd0FBcHVxd3lodmFodTJ1OHdnYmp5TDBmc3hKVWhud2RmUExmNnU4dTh1L1hYc0tXZ2VUUG4vVndhbTNpeGMrdE9qL3AybjhMcXFiM2RCN2o1Z0hmUWZuTVYvT09welBoNCs5bmpTZlk4ZDQ5T2Q5Rngvc21tSndyaXo3OS9Nazd0Y2NmV0lIUHdBQWtQL3ZMTTFmNHZRQ0FBQ1U5b042WFcrYUx5OGUrLzNOei9tMVh2eTJxL0c0NDQvNTBoeXhzejEyMTE3Y0xoZWNnc2dvNTcxb2ptVTY5anBzejZlbURRZFRtY3YzN1A5Tk9pNStWSzY1YVVQMCtYWWNvbStlWmZ6c1pWOExGRkxvR05mM3BNdjVrejVqMjU4WFBjN25qODNuSFUxZ1hrYW91NTk3bDNuTE5yOGZlbWQyeGo1L20yTkJRdE9lTnY5RExCWkZMUDBwQ3dBQTB5RTBCd0NBRW45UUY1cm43TXQxMWMxdTdoTDFHdUxlcy84WFZmZEI3Mno2dktlRklFTjZuWGJWRi8yTS9ZVzNYZXd5SDNOb0hwVWRtaTkvWlRoVnRyQmFhQTRBQU94U25oMEFBSmk2Q0d1K3pPQTYvMU95dUtUQVBLVGR0Z2NUN3ZmWXRiN3VzVC9qczA0bTNKL0hPZCt6UGdCbDJXOUpDMmRXdVo1eGVoUUFBT2lDMEJ3QUFKaTBGQ0l2bStOeXdwY1pZZEx5UjZYSkN4bURUZlBsOVlUNy8yV2ZRVy9Ubi9GWlp4UHV6K1BIdnErK2dQdndzT0syZFpXbjBzUXFkOGw3QUFDQUxhRTVBQUF3ZVNrNGo5M09YeWQ2aVVlbEJ1WTdZN0J1dnJ5ZmFQK2Y5RkZTL0phWXoxT3RvUEI2cE9Hb1VQZVd1cTVYVlo0eStIYndBd0FBblJLYUF3QUFzNUJDNVdVMXJlQThydVhQQVFMYng0N0JxcHBlYWZHVHRQTzc3NzdjVmxDWVduRCtlaXp6K1JhaDdpMTFYZTgzWDk1bGVzNGQ2bEVBQUtCTFFuTUFBR0EyVW5DK3FLWVJORzVMc3ArT2JBd09xK21VYXY4NFJHQyswNWZiNFB4c0l2UDUrVWdEYzZIdWorVWFTenY0QVFDQXpnbk5BUUNBV2RrSkdqK04rRElpOU44dnZTVDdUOFpnWGQwRTUyUGU5Ujg3b285S21NL05FZk41ekR2NEw2dWJCU0RuSTIyL1VQZVdWSmI5V1laVDJjRVBBQUQwUW1nT0FBRE1UZ29hNDUzUWIwZlkvTmpkdkQvMmtDNEY1OHRxZkx2K2k5d1J2Yk9EZjJ3TEVXS1gvUDZJQTNPaDdpM0tzZ01BQUdNa05BY0FBR1lyaFYzUHEzR1V0NDdkdUgrVXNMczVZLzl2M3pQL2NTUk5qdW9FaTFJRDNoVGs3NDlrUGtjZytqWjJ5YWZxRDJNazFMMmxydXVuelpkY3I0eXdneDhBQU9pTjBCd0FBSmkxQ0VCVGVldFNkK2xHbTk0M2JZeXdkalBCL3I5S0N3RktYcndRQ3hiK2pPb0VwUWU4RVRJV1BwK3I2djkzbDQ5OWg3WlE5d2Q5MGh4N09lYUlIZndBQUVDZmhPWUFBQURWdDEyNmkrWjRYNVVSTm41TmJZbXdmRFdEL3Q5ZHZIQlpTTE8yWXhBQjc2bjUzRnFFNVgrazNlVVhJNSt5UXQxYjZycU8rL2ROcHZ2dVVJOENBQUI5RXBvREFBQWthZGR6N0I2TkVzTVIzZzd4dnUwSWpPTmQ2NHZVbHF1WmpjRTZkdFUzdi95ekdtN24rV1VhLzFHUHdYWStWemZoK2R0cXVNVUlVZForRzVadkpqQk5oYnEzcExMczYweW5zNE1mQUFEb25kQWNBQURnQjFKNEcrK0hqckxoOGM3dExnUDB5L1FaejFNWjlnOXpDOHQvMFArbmFlZjU3OVZONE52MUFvYmJZN0NleWhpazhQeERXb3p3UjNPY1ZOM3ZQajlMNC9aN0ttdS9tZEQwRk9wK0wzYmRLOHNPQUFDTVZ0MzhaVVF2QUFCQWFUK28xM1dFdFU4ZisvMVRmUGQxSWVPeWFMNHNtMk0vSFM4ZWVhb0lnTStiSThacEk0QjdjUC9Ic1dqUi8rRXNqY0g1WE1jZ1BXZVdPM1A2c2FGbkxEaTRTUE41MjU5WEk3ajJSejFqaDNxK3R2eHo0YUxMT1o1S3MrZHczdGZjYWRubVdJaHk3cWtNQUFEVDhYOENEQUNsWXdDdk9qZTE0QUFBQUFCSlJVNUVya0pnZ2c9PSIgZGF0YS1maWxlbmFtZT0iQ05SVVNTSUFfTE9HT1NfYmxhY2stMDIucG5nIiBzdHlsZT0id2lkdGg6IDMwNy42cHg7IGhlaWdodDogNjMuNzY4MXB4OyI+PC9kaXY+CjxwPjxicj48L3A+PHA+PGJyPjwvcD48cD7Ql9C00YDQsNCy0YHRgtCy0YPQudGC0LUsINC00L7RgNC+0LPQvtC5INGH0LjRgtCw0YLQtdC70YwhJm5ic3A7PC9wPjxwPjxicj48L3A+PGRpdj7QktCw0Ygg0LfQsNC60LDQtyDihJYgPHN0cm9uZz48dT57b3JkZXJOdW19PC91Pjwvc3Ryb25nPiDQuNC3INC80LDQs9Cw0LfQuNC90LAgPHN0cm9uZz48dT57c2hvcE5hbWV9PC91Pjwvc3Ryb25nPiZuYnNwO9Cx0YvQuyDRg9GB0L/QtdGI0L3QviDQvtGE0L7RgNC80LvQtdC9Ljxicj48YnI+IDxzdHJvbmc+0JDQtNGA0LXRgSDQtNC+0YHRgtCw0LLQutC4Ojwvc3Ryb25nPjxicj48YnI+PHNwYW4+e2RlbGl2ZXJ5QWRkcmVzc308L3NwYW4+PC9kaXY+PHA+PGJyPjxicj7QlNC70Y8g0L/RgNC+0YHQvNC+0YLRgNCwINC00LDQvdC90YvRhSDQt9Cw0LrQsNC30LA8c3BhbiBzdHlsZT0iY29sb3I6IHJnYigzMiwgMzEsIDMwKTsgZm9udC1mYW1pbHk6ICZxdW90O1NlZ29lIFVJIFdlYiAoQ3lyaWxsaWMpJnF1b3Q7LCAmcXVvdDtTZWdvZSBVSSZxdW90OywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBSb2JvdG8sICZxdW90O0hlbHZldGljYSBOZXVlJnF1b3Q7LCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDE1cHg7Ij4mbmJzcDs8L3NwYW4+0LLQvtGB0L/QvtC70YzQt9GD0LnRgtC10YHRjCZuYnNwOzxzdHJvbmc+PGEgaHJlZj0ie29yZGVyTGlua30iPtGN0YLQvtC5INGB0YHRi9C70LrQvtC5PC9hPjwvc3Ryb25nPi48L3A+",
            "reportsUseDemoData": false,
            "uid": "55c43dd7-1167-d151-92b4-3f59a47dbb2d",
            "useCustomDlvTariffLogin": true
        }
изменение происходит если заполнен id.
3. Удаление liteSettings. Метод DELETE /api/lite/admin/settings/lite?id=333kcjnsd-3jkw393njk-33skdc88. Удаляет liteSettingsиз базы.
Инструменты администратора

/api/lite/admin/settings/warehouses - настройки склада

1. Получения списка склада. Метода GET /api/lite/admin/settings/warehouses.

2. Изменение склада реализовано одной операцией. Метод POST /api/lite/admin/settings/warehouses. В теле метода передаем json:

{
            "accumRegistryEnabled": false,
            "active": true,
            "address": {
                "building": "3",
                "city": "Москва",
                "cityFiasCode": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "country": "RU",
                "fullAddress": "Москва, Котляковская, д 1, стр 3",
                "fullApartment": "",
                "fullKorpusStroenie": "стр. 3",
                "fullStreetAddress": "Котляковская, д. 1, стр. 3",
                "house": "1",
                "region": "Москва",
                "regionFiasCode": "0c5b2444-70a0-4932-980c-b4dc0d3f02b5",
                "street": "Котляковская",
                "uid": "03f7860c-9bc1-bd24-60d6-0590d61eeea3",
                "useSuggestions": true,
                "zip": "115201"
            },
            "children": [],
            "default": false,
            "defectedWarehouse": null,
            "isAccumRegistryEnabled": false,
            "isActive": true,
            "isDefault": false,
            "isGuaranteedAmount": true,
            "name": "GLOBAL_DELIVERY",
            "operatorType": "MANUAL",
            "packingControl": false,
            "uid": "7cc571a8-8b71-d5c4-4faf-deb08b9b01f5",
            "warehouseOrderType": "NON_ORDER",
            "warehouseServicesForTenantList": [],
            "whOperationType": "SORT_CENTER"
        }
изменение происходит если заполнен id.
3. Удаление настроек склада. Метод DELETE /api/lite/admin/settings/warehouses?id=7cc571a8-8b71-d5c4-4faf-deb08b9b01f5. Удаляет склад из базы.
Инструменты администратора

/api/lite/admin/settings/stock-correction - коррекция остатков

Коррекция остатков реализована одной операцией. Метод POST /api/lite/admin/settings/stock-correction. В теле метода передаем json:

{
    "warehouseId": "2224427d-7524-9cf8-23b9-b4aab059678a",
    "lessItems": [
                {
            "afterCorrection": 994686,
            "available": 597,
            "diff": 994089,
            "external": 994686,
            "item": {
                "article": "",
                "barcode": "977156333800820006",
                "img": "https://storage.yandexcloud.net/images-k2c/3962f8ba-15bd-45bb-813e-46dbe557edad.jpg",
                "name": "Gentlemen's Quarterly/GQ Россия №6",
                "productExtId": "1563-3381",
                "productId": "1042",
                "variantExtId": "",
                "variantId": "1042"
            },
            "reserved": 0,
            "reviseError": false
        }
    ],
    "moreItems": [
        {
            "afterCorrection": 0,
            "available": 301,
            "diff": 301,
            "external": 0,
            "item": {
                "article": "",
                "barcode": "977156333800820005",
                "img": "https://storage.yandexcloud.net/images-k2c/cc0edc3b-df39-43f3-9dd1-9ff47d1b6477.jpg",
                "name": "Gentlemen's Quarterly/GQ Россия №5",
                "productExtId": "1563-3381",
                "productId": "1031",
                "variantId": "1031"
            },
            "reserved": 0,
            "reviseError": false
        }
    ]
}
коррекция происходит если заполнен warehouseId.
Содержимое массивов moreItems и lessItems идентичны этим массивам из ответа на запрос/api/lite/products/stock_revise. Соответственно фронт может использовать почти напрямую ответ запроса остатков, необходимо только идентификатор склада добавить в json.
Инструменты администратора

/api/lite/admin/settings/order-type - установка типа заказа

Установка типа заказа реализована одной операцией. Метод POST /api/lite/admin/settings/order-type. В теле метода передаем json:

{ 
    "id":"875c17e3-bb0c-083d-4eaf-69ee3661036d",
    "orderType": "STANDARD"
}
Тип заказа можно сменить только если заполнен id.

/api/lite/products/find/barcodes - поиск вариантов товаров по ШК

Поиск варинатов товаров по ШК из списка

/api/lite/products/find/barcodes

Находит все сжатую информацию о вариатах товаров по их ШК.

Пейджинация

Для пейджинации используются параметры page и size

Пример: /api/lite/products/find/barcodes?page=0&size=1090

Значения по умолчанию (если не переданы):

Максимальное количество записей на странице - 1000

Пример запроса:

{
  "barcodes": ["1234567890", "1234567891"]
}

Пример успешного ответа:

{
  "variants": [
    {
      "id": "00003-62652#0005",
      "name": "Товар 1",
      "barcodes": ["4062955945900"]
    }
  ],
  "recordsTotal": 100
}

Поле recordsTotal возвращает общее количество записей в системе.

Маржинальность

Маржинальность

/api/lite/products/prices/margin/history - История изменения средней цены закупки.

Подсказка полного адреса (/api/prompter/address)

/api/lite/products/prices/margin/history?id=1040.

 Получения истории изменения Средней ценой закупки по кокнкретному товару. Входной параметр - id товара

{
    "history": [
        {
            "date": "2023-09-18 12:53:08",
            "price": 125.00,
            "success": true
        },
        {
            "date": "2023-09-18 12:52:51",
            "price": 135.00,
            "success": true
        },
        {
            "date": "2023-09-12 09:01:30",
            "price": 125.00,
            "success": true
        },
        {
            "date": "2023-09-12 05:25:44",
            "price": 120.00,
            "success": true
        }
    ],
    "success": true
}
выполнялось по задаче: 12072
Маржинальность

/api/lite/report/margin - пересчёт отчета по маржинальности.

/api/lite/report/margin

Метод принудительного пересчёта отчета по маржинальности и сохранения его в общие отчёты аккаунта

Отчёт состоит из: даты, массива предупреждений и массива каналов продаж. У предупреждений есть три типа (см. ссылку на задачу внизу). Каналы продаж состоят из названия канала и трёх массивов: годовой информации, месячной и недельной (см. JSON). Внутри каналов продаж есть totalSales, это суммарные значения всех каналов

входные параметры:

isDelivered - флаг указания, какой отчет вывести. Если надо вывести отгруженные, то не указывается или false. Если необходимо вывести отчет по доставленным товарам, то true. Внимание: независимо от флага, пересчёт будет совершен на оба отчёта. От флага зависит только вывод.

{
    "channelSales": [        
        {
            "annuallyData": [
                {
                    "margin": 0,
                    "point": "Сен",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                },
                {
                    "margin": 0,
                    "point": "Окт",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                },
              
                // ...
                // вырезал 9 месяцев, чтобы не растягивать статью в вики
                // ...
              
                {
                    "margin": 0,
                    "point": "Авг",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                }
            ],
            "channel": "ONLINE",
            "monthlyData": [
                {
                    "margin": 0,
                    "point": 20,
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                },
               
                // ...
                // вырезал 28 дней, чтобы не растягивать статью в вики
                // ...
              
                {
                    "margin": 0,
                    "point": 19,
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                }
            ],
            "weeklyData": [
                {
                    "margin": 0,
                    "point": "Ср",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 3350.00,
                    "totalSales": 4475.00
                },
                
                // ...
                // вырезал 5 дней, чтобы не растягивать статью в вики
                // ...
              
                {
                    "margin": 0,
                    "point": "Вт",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                }
            ]
        },
        {
            "annuallyData": [ ], // вырезал содержимое, чтобы не растягивать статью в вики
            "channel": "totalSales",
            "monthlyData": [ ], // вырезал содержимое, чтобы не растягивать статью в вики
            "weeklyData": [ ] // вырезал содержимое, чтобы не растягивать статью в вики
        }
    ],
    "date": "2023-09-20",
    "warning": [
        {
            "additionalInfo": "Список товаров: [1029, 1028, 1026, 1025, 1024, 1040]",
            "priority": 1,
            "title": "Нет данных. Для расчета укажите средние цены закупки."
        },
        {
            "additionalInfo": "Если в расчете фиксируются аномальные показатели маржинальности – меньше 1% или больше 50%.",
            "priority": 3,
            "title": "Аномальные показатели. Возможно необходимо актуализировать данные по ценам закупки и затрат."
        }
    ]
}
также есть отчет потоварный, см. соседнюю статью.
выполнялось по задаче: 12073
Маржинальность

/api/lite/products/margin - расчёт отчёта по маржинальности для товара.

/api/lite/products/margin?id=1040

Метод расчёта отчета по маржинальности конкретного товара по его humanId. Используется метод GET, потому что никакие расчитанные данные не сохраняются в БД. 

Отчёт состоит из: даты, массива предупреждений и массива каналов продаж. У предупреждений есть три типа (см. ссылку на задачу внизу). Каналы продаж состоят из названия канала и трёх массивов: годовой информации, месячной и недельной (см. JSON).

входные параметры:

isDelivered - флаг указания, какой отчет вывести. Если надо вывести отгруженные, то не указывается или false. Если необходимо вывести отчет по доставленным товарам, то true.  

skuHumanId - id товара, на который требуется отчёт.

{
    "channelSales": [        
        {
            "annuallyData": [
                {
                    "margin": 0,
                    "point": "Сен",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                },
                {
                    "margin": 0,
                    "point": "Окт",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                },
              
                // ...
                // вырезал 9 месяцев, чтобы не растягивать статью в вики
                // ...
              
                {
                    "margin": 0,
                    "point": "Авг",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                }
            ],
            "channel": "ONLINE",
            "monthlyData": [
                {
                    "margin": 0,
                    "point": 20,
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                },
               
                // ...
                // вырезал 28 дней, чтобы не растягивать статью в вики
                // ...
              
                {
                    "margin": 0,
                    "point": 19,
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                }
            ],
            "weeklyData": [
                {
                    "margin": 0,
                    "point": "Ср",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 3350.00,
                    "totalSales": 4475.00
                },
                
                // ...
                // вырезал 5 дней, чтобы не растягивать статью в вики
                // ...
              
                {
                    "margin": 0,
                    "point": "Вт",
                    "totalCosts": 0,
                    "totalIncome": 0,
                    "totalPurchases": 0.00,
                    "totalSales": 0.00
                }
            ]
        },
        {
            "annuallyData": [ ], // вырезал содержимое, чтобы не растягивать статью в вики
            "channel": "totalSales",
            "monthlyData": [ ], // вырезал содержимое, чтобы не растягивать статью в вики
            "weeklyData": [ ] // вырезал содержимое, чтобы не растягивать статью в вики
        }
    ],
    "date": "2023-09-20",
    "warning": [
        {
            "additionalInfo": "Список товаров: [1029, 1028, 1026, 1025, 1024, 1040]",
            "priority": 1,
            "title": "Нет данных. Для расчета укажите средние цены закупки."
        },
        {
            "additionalInfo": "Если в расчете фиксируются аномальные показатели маржинальности – меньше 1% или больше 50%.",
            "priority": 3,
            "title": "Аномальные показатели. Возможно необходимо актуализировать данные по ценам закупки и затрат."
        }
    ]
}
также есть отчет общий на аккаунт, см. соседнюю статью.
выполнялось по задаче: 12073

Консолидация

Консолидация

Создание товаров

Для создания товаров можно полноценно использовать Апи работы с товарами,

а также импорты/экспорты excel файлов с номеклатурой. 

Также полноценно работает и раздел Товары в ЛК пользователя 

 

В дополнение к этим стандартным возможностям - есть режим автосоздания номенклатуры для аккаунта Консолидации - прямо из Апи заказов на отгрузку.

Для этого в order.items нужно - в дополнение к стандартным полям строrи заказа (num, variantId, price, quantity, vatRate) - передать поля:

skuType, barcode, name, article
 {
 	...
	"items": [ 
                {
                    "num": 1,
                    "variantId": "100-201",
                    "price": 1000.00,              
                    "quantity": 2,                   
                    "skuType": "SKU",                   
                    "vatRate": "VAT_20",                  
                    "barcode": "461234567836",
                    "name": "Конструктор для развития творчества №12",
                    "article": "const-N12"
                }
                ...
             ]
}             

Система автоматически проверит наличие указанных товаров по их коду (поле variantId), и создаст, если не будет найден указанный товар.

 

Консолидация

Создание заказов

Создание заказов работает по стандартному Апи заказов.  Используется "Свой склад" без контроля остатков. 

Заказ создается/редактируется по указанному id. Если поле id не задано - то система сгенерирует очередной уникальный человекочитаемый номер из внутреннего пула (вида 1234-1000). 

Чтобы заказ был готов к упаковке - необходимо передать статус подтверждения confirmStatus = APPROVED, а также комбинацию способа и статуса оплаты, позволяющую начать упаковку. А также остальные поля по строкам заказа, способу и адресу доставки.

Консолидация

Упаковка заказов

Упаковка осуществляется передачей по заказу желаемого состояния упакованных мест (количество мест, их товарное содержимое, габариты и масса, уникальные номера товаров (например, честный знак), штрихкод места (опционально)).

 

Создание/редактирование всех упакованных мест заказа

/api/lite/orders/consolidation/packing

Создание/редактирование набора упакованных мест заказов. Номер заказа обязательный параметр - поле id.

Система трактует переданный набор упакованных мест как итоговое желаемое состояние упакованных мест заказа. Если уже есть упакованные места - система проанализирует и приведет их в соответствие с переданным набором.

Сверка идет по полю num и barcode.

Если у мест передан штрихкод (поле barcode) - система запишет его, иначе присвоит ШК из внутреннего пула.

Система позволяет передавать сразу много заказов на упаковку в запросе (массив orders).

 

Важно. Сразу после первичной полной упаковки заказа (по данным системы - все товары заказа упакованы) - идет выгрузка заказа в Апи службы доставки. Если получены ошибки от службы доставки - операция вернет success = false и список полученных ошибок. Их необходимо исправить и повторно вызвать упаковку заказа.


Пример запроса

{
    "orders": [
        {
            "id": "60-71",
			"packings": [				
                {                                 
					"num": 1,
                    "barcode": "123456789",
					"items": [
						{
							"num":1,
							"variantId": "154",
							"quantity": 2,
                           	"accountingAttributes": [
                                  {
                                      "code": "chestnyznak",
                                      "stringValue":"010463001165001521WRA5MP18REV1Y91EE0692LsS8Yf4v2H/umBxy5U/QqZG+pWIGdAqdCktd7H5JAoI="
                                  }
                            	]                            
						},
                        {
							"num":2,
							"variantId": "100-201",
							"quantity": 2                                             
						}                                          
					],
                    "measurements": {
                        "weight": 565,
                        "dimensions": {
                            "height": 10,
                            "width": 11,
                            "depth": 13
                        }
                    } 
				}                
                                           
                ]
        }
    ]
}

 

Успешный ответ

{
    "orders": [
        {
            "id": "60-71",
            "success": true
        }
    ],
    "success": true
}

 

Ошибка:
{
    "errors": [
        {
            "code": 0,
            "message": "[1130659] Переданный уникальный номер не соответствует требованиям \"ЧестныйЗнак\""
        }
    ],
    "orders": [
        {
            "errors": [
                {
                    "code": 0,
                    "message": "[1130659] Переданный уникальный номер не соответствует требованиям \"ЧестныйЗнак\""
                }
            ],
            "id": "5113-1141",
            "success": false
        }
    ],
    "success": false
}

 

Создание/редактирование упакованного места заказа поштучно

PUT /api/lite/orders/consolidation/packing

Создание/редактирование упакованного места заказа поштучно. Влияет только на одно место заказа и изменяет его согласно переданному желаемому состоянию. Остальные места заказа не затрагиваются.

Номер заказа обязательный параметр - поле id.

Формат запроса и ответа аналогичен POST запросу.


Пример запроса

{
    "orders": [
        {
            "id": "60-71",
			"packings": [				
                {                                 
					"num": 1,
                    "barcode": "123456789",
					"items": [
						{
							"num":1,
							"variantId": "154",
							"quantity": 2                                             
						},
                        {
							"num":2,
							"variantId": "100-201",
							"quantity": 2                                             
						}                                          
					],
                    "measurements": {
                        "weight": 565,
                        "dimensions": {
                            "height": 10,
                            "width": 11,
                            "depth": 13
                        }
                    } 
				}                
                                           
                ]
        }
    ]
}

 

Успешный ответ

{
    "orders": [
        {
            "id": "60-71",
            "success": true
        }
    ],
    "success": true
}

 

 

Получение упакованных мест заказа

/api/lite/orders/consolidation/packing

Возвращает перечень упакованных мест заказа. 

Обязательный параметр: id заказа.

Пример ответа по частично упакованному заказу
{
    "orders": [
        {
            "date": "2023-09-26 13:40:13",
            "externalId": "60-72",
            "id": "60-72",
            "items": [
                {
                    "article": "",
                    "barcode": "2000916300001",
                    "img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
                    "itemAmountState": {},
                    "itemDimensions": {
                        "depth": 1,
                        "height": 15,
                        "width": 5
                    },
                    "itemWeight": 80,
                    "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                    "num": 1,
                    "price": 2846.00,
                    "productExtId": "BR00T-000140",
                    "productId": "1013",
                    "productVariantCount": 3,
                    "quantity": 2,
                    "skuType": "SKU",
                    "variantExtId": "BR00T-000140-2",
                    "variantId": "154",
                    "vatRate": "NO_VAT",
                    "vatSkuProduct": "NO_VAT"
                },
                {
                    "article": "100-201-артикул",
                    "barcode": "100-100-201",
                    "itemAmountState": {},
                    "itemDimensions": {
                        "depth": 10,
                        "height": 10,
                        "width": 10
                    },
                    "itemWeight": 500,
                    "name": "Тест товар - 100-201",
                    "num": 2,
                    "price": 1000.00,
                    "productId": "1066",
                    "productVariantCount": 1,
                    "quantity": 2,
                    "skuType": "SKU",
                    "variantId": "100-201",
                    "vatRate": "VAT_20"
                },
                {
                    "article": "",
                    "barcode": "",
                    "name": "Доставка",
                    "num": 3,
                    "price": 0.00,
                    "quantity": 1,
                    "skuType": "SERVICE",
                    "variantId": "delivery",
                    "vatRate": "NO_VAT"
                }
            ],
            "notPackedItems": [
                {
                    "article": "100-201-артикул",
                    "barcode": "100-100-201",
                    "itemDimensions": {
                        "depth": 10,
                        "height": 10,
                        "width": 10
                    },
                    "itemWeight": 500,
                    "name": "Тест товар - 100-201",
                    "num": 2,
                    "productId": "1066",
                    "quantity": 1,
                    "skuType": "SKU",
                    "variantId": "100-201"
                },
                {
                    "article": "",
                    "barcode": "2000916300001",
                    "img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
                    "itemDimensions": {
                        "depth": 1,
                        "height": 15,
                        "width": 5
                    },
                    "itemWeight": 80,
                    "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                    "num": 1,
                    "productExtId": "BR00T-000140",
                    "productId": "1013",
                    "quantity": 1,
                    "skuType": "SKU",
                    "variantExtId": "BR00T-000140-2",
                    "variantId": "154"
                }
            ],
            "packings": [
                {
                    "barcode": "3837100281759",
                    "files": [],
                    "items": [
                        {
                            "accountingAttributes": [],
                            "article": "",
                            "barcode": "2000916300001",
                            "img": "https://storage.yandexcloud.net/images-k2c/ea62ff54-ea8f-4a4c-a100-ff3ae38937ca.png",
                            "itemDimensions": {
                                "depth": 1,
                                "height": 15,
                                "width": 5
                            },
                            "itemWeight": 80,
                            "name": "Расческа в чехле Bro Cosmetics, Цвет: коричневый ",
                            "num": 1,
                            "price": 2846.00,
                            "productExtId": "BR00T-000140",
                            "productId": "1013",
                            "productVariantCount": 3,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantExtId": "BR00T-000140-2",
                            "variantId": "154",
                            "vatRate": "NO_VAT",
                            "vatSkuProduct": "NO_VAT"
                        },
                        {
                            "accountingAttributes": [],
                            "article": "100-201-артикул",
                            "barcode": "100-100-201",
                            "itemDimensions": {
                                "depth": 10,
                                "height": 10,
                                "width": 10
                            },
                            "itemWeight": 500,
                            "name": "Тест товар - 100-201",
                            "num": 2,
                            "price": 1000.00,
                            "productId": "1066",
                            "productVariantCount": 1,
                            "quantity": 1,
                            "skuType": "SKU",
                            "variantId": "100-201",
                            "vatRate": "VAT_20"
                        }
                    ],
                    "measurements": {
                        "dimensions": {
                            "depth": 13,
                            "height": 10,
                            "width": 11
                        },
                        "success": true,
                        "weight": 565
                    },
                    "num": 1
                }
            ],
            "status": "ORDER_INFO_READY_TO_PACK"
        }
    ],
    "recordsTotal": 1,
    "success": true
}

Получение стикера упакованного места

/api/lite/orders/consolidation/packing/print

Возвращает pdf файл со стикером 6x6 см для переданного упакованного места, в формате base64.

Обязательный параметр: barcode -  ШК упакованного места.

{
	"success": true,
	"content": "base64"
}

Пример стикера:

image-1696274700224.png

 

Консолидация

Отгрузка заказов (создание реестра отгрузки)

 

Создание/редактирование реестра отгрузки

/api/lite/takeout_list

Создание реестра отгружаемых заказов, объединенных одной службой доставки. По каждой службе доставки необходимо формировать отдеьный реестр. В отгруженный реестр вносить изменения состава заказов более нельзя. 

 

{
    "id":"1105",
    "courierCode":"LOGSIS",
    "takeoutDate": "2023-09-22",
    "takeoutHourStart":"09:00",
    "takeoutHourEnd":"18:00",
    "gatherType": "COURIER",
    "date":"2023-09-20 22:12:12", 
    "warehouseCode" : "e98f2e33-d488-d75c-4e38-b912e87429b6",   
    "orders": [{"id":"60-71"}, {"id":"60-72"}]
}

id - номер реестра,

courierCode - код курьерской компании (из перечисления),

takeoutDate - дата передачи заказов в службу доставки,
takeoutHourStart - интервал сбора  (начало),
takeoutHourEnd - интервал сбора  (окончание),
date - дата документа реестра,
gatherType - способ сбора (COURIER - вызов курьера, SELF_PICKUP - самопривоз),
warehouseCode - код склада с которого идет отгрузка (из справочника складов аккаунта),
orders - список номеров заказов реестра

Успешный ответ

{
    "id": "1105",
    "success": true
}

 

Получение  реестра отгрузки

/api/lite/takeout_list

Возвращает реестр отгрузки по его id 

Обязательный параметр: id реестра.

Пример успешного ответа
{
    "recordsTotal": 1,
    "success": true,
    "takeoutLists": [
        {
            "availableForChanges": false,
            "courierCode": "LOGSIS",
            "date": "2023-09-22 11:53:44",
            "id": "1101",
            "orders": [
                {
                    "customer": "Тестовый Покупатель",
                    "date": "2023-09-19",
                    "id": "60-55"
                },
                {
                    "customer": "Тестовый Покупатель",
                    "date": "2023-09-19",
                    "id": "60-56"
                }
            ],
            "status": "SHIPPED",
            "takeoutDate": "2023-09-22",
            "updateTs": "2023-09-22 11:53:44.643",
            "warehouseCode": "e98f2e33-d488-d75c-4e38-b912e87429b6",
            "warehouseManager": {
                "address": {},
                "alternativePhone": "",
                "name": "Не задано",
                "passport": {},
                "patronymic": "",
                "phone": "+73434343434",
                "rawPhone": "Не задано",
                "surname": ""
            },
            "warehouseName": "Свой склад"
        }
    ]
}

 

Получение печатной формы реестра

/api/lite/takeout_list/print

Возвращает pdf файл спечатной формой реестра А4 для указанного реестра, в формате base64.

Обязательный параметр: id реестра.

Пример печатной формы:

image-1696275500785.png

 

Упаковочные материалы

Упаковочные материалы

Упаковочные материалы

Запрос списка упаковочных материалов (GET /api/lite/products)

/api/lite/products

Дублирует https://wiki.kak2c.ru/books/kaktus-dlya-razrabotchikov/page/apiliteproducts

Описание полей аналогичное запросу товаров.

Существует 4 типа упаковочных материалов:

Упаковочные короба PACKING_MATERIAL_BOXES
Другие виды расходных материалов PACKING_MATERIAL_OTHER
Допвложения для упаковки PACKING_MATERIAL_ATTACHMENT
Общие материалы COMMON_PACKING_MATERIA

Запросить можно через параметр запроса filters=SKU_TYPE:

Пример результата запроса:

/api/lite/products?size=2&filters=SKU_TYPE:COMMON_PACKING_MATERIAL

{
    "products": [
        {
            "available": true,
            "deleted": false,
            "id": "COMMON_PACK_Birka",
            "images": [
                {
                    "id": "COMMON_PACK_Birka",
                    "pos": "1.000000000000000",
                    "success": true
                }
            ],
            "shortName": "Бирка + биркодержатель (цвет белый)",
            "type": "COMMON_PACKING_MATERIAL",
            "variants": [
                {
                    "article": "COMMON_PACK_Birka",
                    "id": "COMMON_PACK_Birka",
                    "type": "COMMON_PACKING_MATERIAL",
                    "vat": "NO_VAT"
                }
            ],
            "vat": "NO_VAT"
        }
    ],
    "recordsTotal": 41,
    "success": true
}

Фильтрация по полям товара

Можно задавать фильтр параметром ?query=test - для фильтрации по полям article, humanId, shortName, fullName, description

Дополнительно можно фильтровать по конкректному продукту параметром ?id=1000

Имеется поддержка фильтрации и по другим полям:

Пейджинация

Для пейджинации используются параметры page и size: size - заказов на странице, page - номер страницы.

Пример: /api/lite/products?page=0&size=200

Если параметры не переданы, то дефолтные значения page=0&size=100

Максимальное количество продуктов - 100. Даже если указано значение более 100

Также, для отображение пейджинации следует анализировать параметр recordsTotal, возвращающий общее количество записей (с учетом примененной фильтрации, если она есть).

Сортировка

Для сортировки задается параметр order, принимающий код поля для сортировки и направление сортировки (asc, desc), отделенное символом плюса.

Пример сортировки по имени (возрастание): /api/lite/products?order=shortname+asc

Пример сортировки по имени (убывание): /api/lite/products?order=shortname+desc

Доступные коды сортировки:

Пример вызова с одновременной фильтрацией, пейджинацией и сортировкой:

/api/lite/products?query=Поло&order=shortname+asc&page=0&size=200

Создание/обновление упаковочных материалов (POST /api/lite/products)

/api/lite/products

Создает или обновляет продукт.

Если id указан - проводится обновление продукта с указанным id, если не указан - создается новый.

Если проводится обновление продукта (или варианта) - то обновляются все поля на те, что переданы. Если какие то поля в продукте были непустые, а в запросе они не переданы - то после обновления поля очищаются.

Опционально можно передавать список вариантов товара для обновления, в поле variantsToUpdate. Обновление продукта выполняется первым, если успешно - то начинается обновление вариантов.

Этот список не означает, что коллекция вариантов данного продукта будет приведена к виду в переданном списке вариантов. Будет выполнено только обновление указанных вариантов, безотносительно остальных вариантов их продукта.

Если передан список вариантов - то в ответе в поле variantsResult будет список результатов обновления по каждому варианту, для сопоставления на вызывающей стороне (по полям productId + variantId)

Поле Тип / формат

Описание

id string

Идентификатор продукта. Если не указан, создается новый продукт. Если указан, обновляется продукт с данным id или создаётся новый продукт с пользовательским id.

extId string Дополнительный идентификатор продукта
shortName string Наименование продукта
description string Описание (может содержать html)
deleted boolean Архивная карточка
type enum Тип упаковочного материала
variantsToUpdate объект Объект варианта товара (см. POST /api/lite/products/variants)

 

Пример вызова:

Пример запроса
{
    "id": "10106",
    "shortName": "Новый упаковочный короб 1",
    "type": "PACKING_MATERIAL_BOXES",
    "variantsToUpdate": [
        {
            "weight": 1000,
            "dimensions": {
                "width": 10,
                "height": 10,
                "depth": 10
            },
            "article": "242343",
            "barcodes": [
                {
                    "isDefault": true,
                    "type": "COMMON",
                    "value": "342424655"
                }
            ],
            "productId": "10106",
            "variantId": "10234659"
        }
    ]
}

Пример положительного ответа:

{
    "id": "10106",
    "success": true,
    "variantsResult": [
        {
            "productId": "10106",
            "success": true,
            "variantId": "10234659"
        }
    ]
}

 

Пример положительного ответа с ошибкой сохранения по указанному варианту:

Пример ответа
{
    "id": "10107",
    "success": true,
    "variantsResult": [
        {
            "errors": [
                {
                    "code": 0,
                    "message": "Штрихкод 3424246755 уже используются в варианте [10234659] Новый упаковочный короб 1, артикул: 242343, ШК: 3424246755 "
                }
            ],
            "productId": "10107",
            "success": false,
            "variantId": "10234654"
        }
    ]
}

 

Создание/обновление заказа с упаковочными материалами (POST/api/lite/orders)

/api/lite/orders

Дублирует https://wiki.kak2c.ru/books/kaktus-dlya-razrabotchikov/page/apiliteorders

Упаковочные материалы можно добавить к каждому товару в списке items (кроме товара доставки) в заказе списком packingMaterials, 
который содержит в себе 2 дополнительных списка:
commonMaterials - передаются только общие упаковочные материалы
customMaterials - 3 других типа упаковочных материалов

{   
  "id": "5669-232434357",
  "items": [
    {
      "article": "78787878",
      "barcode": "4254345564",
      "name": "Кактус",
      "productId": "10040",
      "quantity": 3,
      "variantId": "10040",
      "packingMaterials": {
        "commonMaterials": [
          {
            "id": "COMMON_PACK_Birka",
            "shortName": "Бирка + биркодержатель (цвет белый)",
            "type": "COMMON_PACKING_MATERIAL",
            "variants": [
              {
                "article": "COMMON_PACK_Birka",
                "id": "COMMON_PACK_Birka",
                "type": "COMMON_PACKING_MATERIAL",
                "vat": "NO_VAT"
              }
            ],
            "quantity": 1,
            "variantId": "COMMON_PACK_Birka"
          }
        ],
        "customMaterials": [
          {
            "id": "10058",
            "shortName": "тест_ДВ",
            "type": "PACKING_MATERIAL_ATTACHMENT",
            "variants": [
              {
                "article": "66456456",
                "barcodes": [
                  {
                    "isDefault": true,
                    "type": "COMMON",
                    "value": "6564645456"
                  }
                ],
                "dimensions": {
                  "depth": 10,
                  "height": 10,
                  "width": 10
                },
                "id": "1023402",
                "type": "PACKING_MATERIAL_ATTACHMENT",
                "weight": 1000
              }
            ],
            "quantity": 1,
            "variantId": "1023402"
          },
          {
            "id": "10059",
            "shortName": "тест 44 апап",
            "type": "PACKING_MATERIAL_OTHER",
            "variants": [
              {
                "barcodes": [
                  {
                    "isDefault": true,
                    "type": "COMMON",
                    "value": "441441441441441441"
                  }
                ],
                "dimensions": {
                  "depth": 0,
                  "height": 0,
                  "width": 0
                },
                "id": "1023403",
                "type": "PACKING_MATERIAL_OTHER",
                "weight": 0
              }
            ],
            "quantity": 1,
            "variantId": "1023403"
          },
          {
            "id": "10042",
            "shortName": "Короб 01",
            "type": "PACKING_MATERIAL_BOXES",
            "variants": [
              {
                "barcodes": [
                  {
                    "isDefault": true,
                    "type": "COMMON",
                    "value": "34523465"
                  }
                ],
                "dimensions": {
                  "depth": 0,
                  "height": 0,
                  "width": 0
                },
                "id": "1023386",
                "type": "PACKING_MATERIAL_BOXES",
                "weight": 0
              }
            ],
            "quantity": 1,
            "variantId": "1023386"
          }
        ]
      }
    }
  ]
}

Пример полного вызова:

Пример запроса
{
    "confirmStatus": "NEED_CONFIRM",
    "createTs": "2025-02-10 17:41:47.618",
    "crossdockEditable": true,
    "currency": "RUB",
    "customerPaymentInProcess": false,
    "date": "2025-02-10 17:41:47",
    "delivery": {
        "address": {
            "fullAddress": "",
            "region": ""
        },
        "deliveryPrice": 0,
        "desiredDeliveryTimeFrom": "09:00",
        "desiredDeliveryTimeTo": "18:00",
        "pvzComment": "",
        "receiver": {
            "address": {
                "fullAddress": "",
                "region": ""
            },
            "alternativePhone": "",
            "passport": {},
            "personType": "CUSTOMER",
            "phone": ""
        }
    },
    "fbmWithFile": false,
    "id": "5669-232434357",
    "insuranceSum": 0,
    "insuranceSumAutoCalculation": true,
    "items": [
        {
            "article": "78787878",
            "barcode": "4254345564",
            "expirationDays": 180,
            "expirationMode": "USE_EXPIRATION",
            "itemDimensions": {
                "depth": 0,
                "height": 0,
                "width": 0
            },
            "itemWeight": 0,
            "name": "Кактус",
            "num": 1,
            "price": 0,
            "productId": "10040",
            "productVariantCount": 1,
            "quantity": 3,
            "quantityAvailable": 0,
            "skuType": "SKU",
            "variantId": "10040",
            "vatRate": "VAT_5",
            "vatSkuProduct": "VAT_5",
            "packingMaterials": {
                "commonMaterials": [
                    {
                        "id": "COMMON_PACK_Birka",
                        "shortName": "Бирка + биркодержатель (цвет белый)",
                        "type": "COMMON_PACKING_MATERIAL",
                        "variants": [
                            {
                                "article": "COMMON_PACK_Birka",
                                "id": "COMMON_PACK_Birka",
                                "type": "COMMON_PACKING_MATERIAL",
                                "vat": "NO_VAT"
                            }
                        ],
                        "quantity": 1,
                        "variantId": "COMMON_PACK_Birka"
                    }
                ],
                "customMaterials": [
                    {
                        "id": "10058",
                        "shortName": "тест_ДВ",
                        "type": "PACKING_MATERIAL_ATTACHMENT",
                        "variants": [
                            {
                                "article": "66456456",
                                "barcodes": [
                                    {
                                        "isDefault": true,
                                        "type": "COMMON",
                                        "value": "6564645456"
                                    }
                                ],
                                "dimensions": {
                                    "depth": 10,
                                    "height": 10,
                                    "width": 10
                                },
                                "id": "1023402",
                                "type": "PACKING_MATERIAL_ATTACHMENT",
                                "weight": 1000
                            }
                        ],
                        "quantity": 1,
                        "variantId": "1023402"
                    },
                    {
                        "id": "10059",
                        "shortName": "тест 44 апап",
                        "type": "PACKING_MATERIAL_OTHER",
                        "variants": [
                            {
                                "barcodes": [
                                    {
                                        "isDefault": true,
                                        "type": "COMMON",
                                        "value": "441441441441441441"
                                    }
                                ],
                                "dimensions": {
                                    "depth": 0,
                                    "height": 0,
                                    "width": 0
                                },
                                "id": "1023403",
                                "type": "PACKING_MATERIAL_OTHER",
                                "weight": 0
                            }
                        ],
                        "quantity": 1,
                        "variantId": "1023403"
                    },
                    {
                        "id": "10042",
                        "shortName": "Короб 01",
                        "type": "PACKING_MATERIAL_BOXES",
                        "variants": [
                            {
                                "barcodes": [
                                    {
                                        "isDefault": true,
                                        "type": "COMMON",
                                        "value": "34523465"
                                    }
                                ],
                                "dimensions": {
                                    "depth": 0,
                                    "height": 0,
                                    "width": 0
                                },
                                "id": "1023386",
                                "type": "PACKING_MATERIAL_BOXES",
                                "weight": 0
                            }
                        ],
                        "quantity": 1,
                        "variantId": "1023386"
                    }
                ]
            }
        },
        {
            "barcode": "",
            "name": "Доставка",
            "num": 2,
            "price": 0,
            "quantity": 1,
            "skuType": "SERVICE",
            "variantId": "delivery",
            "vatRate": "NO_VAT"
        }
    ],
    "legalEntity": {
        "id": "15d72385-dadf-a591-fefe-86c65661463f",
        "name": " Розничный покупатель",
        "type": "COMPANY"
    },
    "manualDiscount": {
        "appliedDiscountValue": 0,
        "discountType": "FIX",
        "discountValue": 0,
        "isActive": false
    },
    "needCustomerPayment": false,
    "needReserve": true,
    "onlinePaymentSum": 0,
    "orderType": "STANDARD",
    "packingOptions": [
        {
            "packSpecialsToSeparatePackingPlace": false
        }
    ],
    "paymentMethodCode": "no-cod",
    "paymentMethodName": "Без наложенного платежа",
    "paymentMethodType": "NO_COD",
    "paymentStatus": "NOT_PAID",
    "status": "ORDER_INFO_NEED_CONFIRM",
    "totalOrderSum": 0,
    "updateTs": "2025-02-10 17:41:48.025",
    "warehouseCode": "21ad85be-09a9-c4f8-72e1-4976f9d5bda6",
    "warehouseFFExportError": false,
    "warehouseFFExported": false,
    "warehouseFFSync": false,
    "warehouseName": "NEW WMS!",
    "warehouseShippingOptions": {
        "packingType": "MIX_PACKINGS"
    }
}

Пример положительного ответа:

{
    "c": "825f47b4-fd58-24ce-65e0-2f3cf116caa0",
    "orderId": "5669-232434357",
    "status": "ORDER_INFO_NEED_CONFIRM",
    "success": true
}

В запросе информации по заказу по методу GET /api/lite/orders информация по упаковочным материалам отображается аналогично, в виде приведенных выше списков