API Личного кабинета клиента Stynergy

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

Примечание. Документация находится в стадии доработки. В местах, где информация недостаточно определена или отсутствует, добавлены комментарии <!-- TODO: ... --> для последующего уточнения.

Базовый URL

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

https://lk.stynergy.pro/lkapi

Вызов метода осуществляется через параметр task:

https://lk.stynergy.pro/lkapi?task=<МЕТОД>&apikey=<ВАШ_API_КЛЮЧ>

Для передачи заказов используется отдельный URL:

POST https://lk.stynergy.pro/setorders1c

Авторизация

Для доступа ко всем методам API требуется API-ключ, который передаётся в параметре apikey в строке запроса либо в теле запроса (для метода отправки заказов). Значение ключа выдаётся администратором сайта.

Параметр Расположение Тип Описание
apikey query / body string Уникальный ключ для авторизации клиента в API.
Примеры ошибок авторизации:
{
    "error": "API key is missing."
}
{
    "error": "Invalid API key"
}

Формат запросов и ответов

Методы чтения (GET)

Методы getProducts, getProductsPrice, getContracts, getOrders, getStock вызываются методом GET. Параметры передаются в строке запроса.

Методы записи (POST)

Метод setorders1c предназначен для передачи заказов с вашей 1С-системы и вызывается методом POST. Данные передаются в формате JSON.

Формат данных

  • Кодировка: UTF-8
  • TODO: Уточнить точное значение заголовка Content-Type для POST-запроса (ожидается application/json).
  • Ответы: JSON-массив или JSON-объект
  • Числа могут возвращаться как строки (например, цена, вес, количество)
  • Десятичный разделитель в некоторых полях может быть запятая (например, длина, цена)

Параметры пагинации

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

Параметр Тип Обязательный Описание
limit integer нет Количество записей, возвращаемых за один запрос.
offset integer нет Номер первой записи (смещение от начала выборки).
TODO: Уточнить значения по умолчанию и максимальные значения для limit/offset, а также наличие индикатора того, что данные закончились.

Обработка ошибок

В случае ошибок API возвращает JSON-объект с полем error, содержащим текстовое описание проблемы.

{
    "error": "Invalid task"
}
GET

1. getProducts – Получение информации о продукции

/lkapi?task=getProducts

Метод возвращает список товаров с основной информацией: артикул, наименование, возможные длины, наличие, категорию, цену и др.

Параметры запроса

Имя Тип Обязательный Описание
limit integer нет Количество записей за один запрос.
offset integer нет Номер первой записи.
created string нет Дата создания продукта. Формат: DD.MM.YYYY (например, 01.01.2024).
TODO: Уточнить, является ли это фильтр «с даты и позже» или точное совпадение.
modified string нет Дата изменения продукта. Формат: DD.MM.YYYY.
TODO: Уточнить логику фильтрации (с указанной даты и позже или только на указанную дату).
sku string нет Артикул продукции. Можно передавать несколько значений, разделяя их символом |. Например: ST-00027961|ST-00018348.
apikey string да API-ключ клиента.

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

GET https://lk.stynergy.pro/lkapi?task=getProducts&limit=10&apikey=ВАШ_АПИ_КЛЮЧ

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

[
    {
        "id": 27961,
        "sku": "ST-00027961",
        "name": "Металлочерепица СМ Классик CORUNDUM50® RAL 5018 0.50",
        "weight": "4.4050",
        "stock": 0,
        "stock_metal": "03",
        "array_lenght": "0,450 м.;0,460 м.;...;8,000 м.;4,850 м.",
        "categories": "Металлочерепица\\Металлочерепица СМ Классик\\CORUNDUM50",
        "categories_slug": "metallocherepica804\\metallocherepica-sm-klassik835\\corundum50845",
        "contract_group": "МЧ СМ - CORUNDUM50",
        "price": "902,6",
        "unit": "м2",
        "RALZN": "CORUNDUM50®"
    }
]

Описание полей ответа

Поле Тип Описание
id integer Внутренний ID товара в системе.
sku string Артикул товара.
name string Полное наименование товара.
weight string Вес единицы продукции.
stock number / string Количество товара на складе (может быть целым или дробным значением).
stock_metal string Статус наличия металла (см. раздел Статусы наличия металла).
array_lenght string Список возможных длин, разделённых ; (точка с запятой). Значения содержат единицы измерения (например 0,450 м.).
categories string Иерархия категорий через обратный слэш \. Например: Металлочерепица\Металлочерепица СМ Классик\CORUNDUM50.
categories_slug string Иерархия кодов категорий (slug) через \ для уникальной идентификации дерева.
contract_group string Группа договора / ценовая группа (например, МЧ СМ - CORUNDUM50).
price string Цена товара (как правило, за единицу измерения). Может использовать запятую как разделитель.
unit string Единица измерения (например, м2).
RALZN string Маркировка покрытия / цветовой системы (например, CORUNDUM50®).
GET

2. getProductsPrice – Получение цен с учётом скидки по договору

/lkapi?task=getProductsPrice

Метод возвращает список товаров с ценой по прайс-листу, скидкой по договору и итоговой ценой с учётом этой скидки. В случае проблем с договором возвращается ошибка.

Параметры запроса

Имя Тип Обязательный Описание
limit integer нет Количество записей за один запрос.
offset integer нет Номер первой записи.
dogovor string да Номер договора (обязательный параметр). Например: ПН-17/24.
TODO: Уточнить, поддерживается ли передача нескольких договоров за один запрос.
sku string нет Артикул продукции. Можно передавать несколько артикулов через |.
apikey string да API-ключ клиента.

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

GET https://lk.stynergy.pro/lkapi?task=getProductsPrice&limit=5&dogovor=ПН-17/24&apikey=ВАШ_АПИ_КЛЮЧ

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

[
    {
        "id": 27961,
        "sku": "ST-00027961",
        "name": "Металлочерепица СМ Классик CORUNDUM50® RAL 5018 0.50",
        "group": "МЧ СМ - CORUNDUM50",
        "price": "902.60",
        "discount": 24,
        "price_with_discount": "685.98"
    },
    {
        "id": 18348,
        "sku": "ST-00018348",
        "name": "Профнастил ST15 CORUNDUM50® RAL 8017 0.50",
        "group": "МЧ СМ - CORUNDUM50",
        "price": "667.66",
        "discount": 24,
        "price_with_discount": "507.42"
    }
]

Описание полей ответа

Поле Тип Описание
id integer Внутренний ID товара в системе.
sku string Артикул товара.
name string Наименование товара.
group string Группа/ценовая категория товара (группа договора).
price string Цена товара без скидки.
discount number Скидка по договору в процентах.
price_with_discount string Цена товара с учётом скидки по договору.

Возможные ошибки

{
    "error": "API key is missing."
}
{
    "error": "Invalid API key."
}
{
    "error": "Договор не указан"
}
{
    "error": "Договор не найден"
}
{
    "error": "Договор закрыт"
}
GET

3. getContracts – Получение информации по вашим договорам

/lkapi?task=getContracts

Метод возвращает список договоров, доступных пользователю по его API-ключу.

Параметры запроса

Имя Тип Обязательный Описание
limit integer нет Количество записей за один запрос.
offset integer нет Номер первой записи.
apikey string да API-ключ клиента.

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

GET https://lk.stynergy.pro/lkapi?task=getContracts&limit=5&apikey=ВАШ_АПИ_КЛЮЧ

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

{
    "61d9a057-908d-****-***-005056012515": {
        "id": 13600085,
        "HeadClient": "СТР****",
        "HeadClientCode": "ٲ",
        "ClientCode": "ٲ",
        "ClientName": "СТР*****",
        "Contract": "ПН-***/22",
        "idcontract": "61d9a057-908d-****-****-005056012515",
        "contract": [
            {
                "PriceGroupValue": "МЧ GS - СК матовый",
                "DiscountValue": "24",
                "status": "Закрыто"
            },
            {
                "PriceGroupValue": "МЧ GS - СК",
                "DiscountValue": "24",
                "status": "Закрыто"
            }
        ]
    }
}

Описание полей ответа

Корневой объект представляет собой словарь, где ключи – это идентификаторы договоров (GUID/строка), а значения – объекты с информацией по договору.

Поле Тип Описание
GUID договора string Ключ верхнего уровня – идентификатор договора.
id integer Внутренний ID договора.
HeadClient string Наименование головного клиента.
HeadClientCode string Код головного клиента.
ClientCode string Код клиента.
ClientName string Наименование клиента.
Contract string Номер договора (например, ПН-***/22).
idcontract string Идентификатор договора (GUID).
contract array Массив настроек по ценовым группам и скидкам для данного договора.
PriceGroupValue string Наименование ценовой группы (например, МЧ GS - СК).
DiscountValue string Величина скидки по группе в процентах.
status string Статус настройки (например, Закрыто).
TODO: Уточнить возможные значения статуса договора помимо "Закрыто".
GET

4. getOrders – Получение информации по вашим заказам

/lkapi?task=getOrders

Метод возвращает список заказов клиента с информацией о статусе, сумме и позициях заказов.

Параметры запроса

Имя Тип Обязательный Описание
limit integer нет Количество записей полученных за один запрос.
offset integer нет Номер первой записи.
orderNumbers string нет Номер заказа (или несколько через разделитель |).
TODO: Уточнить, какие номера используются: номера ЛК или 1С, либо оба варианта.
createdOn string нет Дата начала периода по дате создания заказов.
endDate string нет Дата окончания периода. Если указана, отбор производится по диапазону от createdOn до endDate.
apikey string да API-ключ клиента.

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

GET https://lk.stynergy.pro/lkapi?task=getOrders&limit=5&apikey=ВАШ_АПИ_КЛЮЧ

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

[
    {
        "id": 82000,
        "order_number": "ст00-***70",
        "invoice": "00-00070",
        "clients": "СТР***",
        "status": "S",
        "price": "36978.61000",
        "date": "06.09.2024",
        "date_completion": "09.09.2024",
        "products": [
            {
                "sku": "ST-00017815",
                "name": "Профнастил ST15 CORUNDUM50® RAL 8017 0.50",
                "quantity": 41,
                "price": "667.66000",
                "product_attribute": "2,000 м.",
                "width": "1,175",
                "units": "м2",
                "info_product_edit": " ",
                "product_produced": 5,
                "product_shipped": 3
            }
        ]
    }
]

Описание полей ответа

Поле Тип Описание
id integer Внутренний ID заказа.
order_number string Номер заказа в личном кабинете (например, ст00-***70).
invoice string Номер заказа/документа в системе 1С.
clients string Название клиента.
status string Статус заказа (код). См. раздел Статусы заказов.
price string Общая стоимость заказа.
date string Дата создания заказа (формат DD.MM.YYYY).
date_completion string Ориентировочная дата готовности (формат DD.MM.YYYY).
products array Массив позиций заказа.
sku string Артикул товара.
name string Наименование товара.
quantity number Количество товара.
price (внутри products) string Цена за единицу продукции.
product_attribute string Атрибут товара (например, длина: 2,000 м.).
width string Ширина продукции.
units string Единица измерения (например, м2).
info_product_edit string Информация о редактировании/добавлении товара менеджером: new – добавлен, edit – изменён, пробел – без изменений.
product_produced number Количество произведённого товара.
product_shipped number Количество товара, отгруженного или подготовленного к отгрузке.
GET

5. getStock – Получение информации по наличию продукции

/lkapi?task=getStock

Метод возвращает информацию о наличии продукции и состоянии металла.

Параметры запроса

Имя Тип Обязательный Описание
limit integer нет Количество записей за один запрос.
offset integer нет Номер первой записи.
sku string нет Артикул продукции. Можно несколько через разделитель |.
apikey string да API-ключ клиента.

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

GET https://lk.stynergy.pro/lkapi?task=getStock&limit=10&apikey=ВАШ_АПИ_КЛЮЧ

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

[
    {
        "id": 4947,
        "sku": "ST-00004947",
        "stock": 0,
        "stock_metal": "01"
    },
    {
        "id": 18348,
        "sku": "ST-00018348",
        "stock": 0,
        "stock_metal": "01"
    }
]

Описание полей ответа

Поле Тип Описание
id integer Внутренний ID товара в системе.
sku string Артикул товара.
stock number Количество товара.
stock_metal string Статус наличия металла (см. раздел Статусы наличия металла).
POST

6. setorders1c – Отправка заказов из 1С

/setorders1c

Метод предназначен для передачи заказов из вашей 1С-системы на сайт для дальнейшей обработки и отображения в личном кабинете.

Формат запроса

Запрос выполняется методом POST. В теле запроса передаётся JSON-объект с массивом заказов в поле Orders.

TODO: Уточнить необходимость передачи apikey в заголовке или теле.

Структура JSON

{
    "Orders": [
        {
            "order_id": "2303778",
            "id_1c": "2303778",
            "number_order": "ст00-00778",
            "date_order": "05022024-16:25:59",
            "status": "Подтвержден менеджером",
            "number_contract": "ПН-17/24",
            "idzayavka": "23032316778",
            "task": "orders",
            "items": [
                {
                    "order_item_sku": "ST-00001324",
                    "product_attribute": "1,200 м.",
                    "product_quantity": 2
                },
                {
                    "order_item_sku": "ST-00001324",
                    "product_attribute": "1,500 м.",
                    "product_quantity": 2
                }
            ]
        }
    ]
}

Описание полей заказа

Поле Уровень Тип Описание
Orders root array Массив заказов, передаваемых за один запрос.
order_id Order string ID заказа в 1С.
id_1c Order string Дублирующий идентификатор заказа (можно использовать тот же, что и order_id).
number_order Order string Отображаемый номер заказа в личном кабинете (например, ст00-00778).
date_order Order string Дата и время заказа. Формат: ДДММГГГГ-ЧЧ:ММ:СС (например, 05022024-16:25:59).
status Order string Статус заказа в текстовом виде (см. раздел Статусы заказов).
number_contract Order string Номер договора, по которому оформлен заказ (например, ПН-17/24).
idzayavka Order string Внутренний номер заявки в 1С для связи с другими сущностями.
task Order string Тип операции. Для передачи заказов должно быть указано значение orders.
items Order array Массив товарных позиций заказа.
order_item_sku Item string Артикул товара.
product_attribute Item string Атрибут товара (например, длина: 1,200 м.).
product_quantity Item number Количество единиц данного товара.
TODO: Описать формат ответа: что возвращает сервис при успешной приёмке заказа (например, статус, ошибки по строкам, дубликаты и т.п.).

7. Диагностика ошибок

При возникновении ошибок API возвращает JSON-объект с полем error. Примеры возможных ответов:

{
    "error": "Invalid API key"
}
{
    "error": "Invalid task"
}
{
    "error": "API key is missing."
}
TODO: По правильному, добавить структурированные коды ошибок (например, code + message) для более удобной обработки на стороне клиента.

Справочник статусов заказов

Ниже приведено соответствие кодов статусов и их текстовых описаний.

Код Описание
P Черновик
C Создан
M Подтвержден менеджером
U Подтвержден покупателем
V В производстве
F Готов частично
Q Готов к отгрузке
S Отгружен
X Закрыт
TODO: Уточнить возможные переходы между статусами и бизнес-правила (кто и когда может менять статус).

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

Код Описание
01 Есть в наличии
02 Нужно уточнить
03 Под заказ
TODO: Уточнить, влияет ли статус наличия металла на возможность оформления заказа в ЛК.

Для получения API-ключа и дополнительной информации об интеграции обратитесь к администратору сайта.

Псевдокод 1С

// Общие параметры подключения
БазовыйURL = "/lkapi";
APIКлюч = "<ВАШ_API_КЛЮЧ>";
HTTP = Новый HTTPСоединение("lk.stynergy.pro", 443, , , , , Истина);

// -------------------------
// 1. Получение договоров
// -------------------------
Путь = СтрШаблон("%1?task=getContracts&apikey=%2", БазовыйURL, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеДоговоры = JSONРазобрать(Ответ.ПолучитьТело());

Сообщить("getContracts → найдено договоров: " + Строка(ДанныеДоговоры.Количество()));

ТекущийGUID = ДанныеДоговоры.Ключи()[0];
НомерДоговора = ДанныеДоговоры[ТекущийGUID].Contract;

// -------------------------
// 2. Получение товаров
// -------------------------
Путь = СтрШаблон("%1?task=getProducts&limit=200&apikey=%2", БазовыйURL, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеТовары = JSONРазобрать(Ответ.ПолучитьТело());

Сообщить("getProducts → позиций: " + Строка(ДанныеТовары.Количество()));

// -------------------------
// 3. Цены по договору
// -------------------------
Путь = СтрШаблон("%1?task=getProductsPrice&dogovor=%2&limit=100&apikey=%3",
    БазовыйURL, НомерДоговора, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеЦены = JSONРазобрать(Ответ.ПолучитьТело());

Сообщить("Цены → первая цена: " + ДанныеЦены[0].price_with_discount);

// -------------------------
// 4. Остатки товара
// -------------------------
ПервыйSKU = ДанныеТовары[0].sku;

Путь = СтрШаблон("%1?task=getStock&sku=%2&apikey=%3",
    БазовыйURL, ПервыйSKU, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеОстатки = JSONРазобрать(Ответ.ПолучитьТело());

Сообщить("getStock → " + ДанныеОстатки[0].sku +
    " металл: " + ДанныеОстатки[0].stock_metal);

// -------------------------
// 5. Заказы
// -------------------------
Путь = СтрШаблон("%1?task=getOrders&limit=20&apikey=%2",
    БазовыйURL, APIКлюч);
Ответ = HTTP.Get(Путь);
ДанныеЗаказы = JSONРазобрать(Ответ.ПолучитьТело());

Если ТипЗнч(ДанныеЗаказы) = Тип("Массив") И ДанныеЗаказы.Количество() > 0 Тогда
    Сообщить("getOrders → заказ " + ДанныеЗаказы[0].order_number +
        ", статус: " + ДанныеЗаказы[0].status);
Иначе
    Сообщить("getOrders → заказы отсутствуют");
КонецЕсли;

Псевдокод 1С: отправка заказов (setorders1c)

// ---------------------
// 6. Отправка заказов
// ---------------------
JSONЗаказ =
'{
    "Orders": [
        {
            "order_id": "2303778",
            "id_1c": "2303778",
            "number_order": "ст00-00778",
            "date_order": "05022025-16:25:59",
            "status": "Подтвержден менеджером",
            "number_contract": "' + НомерДоговора + '",
            "idzayavka": "2303778",
            "task": "orders",
            "items": [
                {
                    "order_item_sku": "' + ДанныеТовары[0].sku + '",
                    "product_attribute": "1,500 м.",
                    "product_quantity": 2
                }
            ]
        }
    ]
}';

// HTTPS
HTTP = Новый HTTPСоединение("lk.stynergy.pro", 443, , , , , Истина);

// Формируем POST-запрос
Запрос = Новый HTTPЗапрос("/setorders1c");
Запрос.УстановитьТелоИзСтроки(JSONЗаказ, "UTF-8", "application/json");
Запрос.Заголовки.Вставить("apikey", APIКлюч);

// Выполняем запрос
Ответ = HTTP.Post(Запрос);

// Разбираем результат
СтрокаОтвета = Ответ.ПолучитьТелоКакСтроку();
Попытка
    JSONОтвет = JSONРазобрать(СтрокаОтвета);
Исключение
    Сообщить("Ошибка разбора JSON ответа: " + СтрокаОтвета);
    Возврат;
КонецПопытки;

// Обработка ответа API
Если ТипЗнч(JSONОтвет) = Тип("Структура") Тогда
    Если JSONОтвет.Свойство("error") Тогда
        Сообщить("Ошибка API: " + JSONОтвет.error);
    ИначеЕсли JSONОтвет.Свойство("success") Тогда
        Сообщить("Успешно → " + Строка(JSONОтвет.success));
    Иначе
        Сообщить("Ответ API: " + Строка(JSONОтвет));
    КонецЕсли;
Иначе
    Сообщить("Ответ API (массив): " + Строка(JSONОтвет));
КонецЕсли;