Товар добавлен в корзину
API импорта товаров
Автоматизируйте загрузку прайс-листа из 1C, сайта или любой другой системы.
Содержание
Обзор возможностей
API позволяет автоматически загружать прайс-лист из вашей учётной системы (1C, ERP, сайт и т.д.) без ручного ввода или загрузки файлов.
- Полная замена прайса — отправьте весь прайс, старые данные заменятся новыми
- Частичное обновление — обновляйте только изменённые позиции по вашему артикулу
- До 5000 товаров за запрос — загружайте крупные прайсы за один вызов
- Атрибуты товаров — передавайте вес, размеры и другие характеристики
- Логирование — полная история импортов доступна в личном кабинете
Быстрый старт
- Для регистрации в личном кабинете поставщика, Заполните форму
- Войдите в личный кабинет поставщика
- Перейдите в раздел Товары → API
- Создайте API-ключ и сохраните его
- Отправьте запрос на импорт (пример ниже)
curl -X POST https://YOUR_DOMAIN/api/external/v1/products/import \ -H "Content-Type: application/json" \ -H "X-Api-Key: ВАШ_API_КЛЮЧ" \ -d '{ "address_id": 1, "mode": "full_replace", "products": [ {"name": "Труба стальная 100x50", "price": 1250.50, "unit": "т"} ] }'
Аутентификация
Все запросы к API должны содержать HTTP-заголовок X-Api-Key с вашим API-ключом.
X-Api-Key: dsk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ВниманиеВажно: API-ключ показывается только один раз при создании. Если вы потеряли ключ, создайте новый в личном кабинете.
Импорт товаров
POST /api/external/v1/products/import
Тело запроса (JSON)
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| address_id | integer | Да | ID адреса из вашего кабинета, к которому привязываются товары |
| mode | string | Да | full_replace или upsert |
| products | array | Да | Массив товаров (от 1 до 5000) |
Пример запроса
{ "address_id": 1, "mode": "full_replace", "products": [ { "name": "Труба стальная 100x50", "price": 1250.50, "external_id": "ART-001", "unit": "т", "attributes": { "weight": 15.5, "length": 6000, "width": 100, "height": 50 } }, { "name": "Лист стальной 2мм", "price": 89000, "external_id": "ART-002", "unit": "т" } ] }
Успешный ответ
{ "status": "success", "data": { "imported": { "received": 2, "created": 2, "updated": 0, "deleted": 0, "skipped": 0 }, "errors": [], "message": "Импорт завершён. Создано: 2, обновлено: 0, удалено: 0, пропущено: 0" } }
Получение товаров
GET /api/external/v1/products
Возвращает список ваших товаров. Можно фильтровать по источнику создания.
| Параметр | Тип | Описание |
|---|---|---|
| page | integer | Номер страницы (по умолчанию 1) |
| per_page | integer | Записей на странице (1-1000, по умолчанию 100) |
| source_type | string | Фильтр: manual, file_import, api_import |
Удаление товаров
DELETE /api/external/v1/products
Удаляет все товары, загруженные через API. Товары, добавленные вручную или через файл, не затрагиваются.
{ "status": "success", "data": { "deleted_count": 150, "message": "Удалено товаров, импортированных через API: 150" } }
Описание полей товара
| Поле | Тип | Обязательное | Макс. длина | Описание |
|---|---|---|---|---|
| name | string | Да | 500 | Наименование товара |
| price | number | Нет | — | Цена в рублях (>=0) |
| external_id | string | Нет | 255 | Ваш артикул / ID товара. Используется для обновления в режиме upsert |
| unit | string | Нет | 100 | Единица измерения: кг, т, шт, м, м2, м3 и т.д. |
| attributes.weight | number | Нет | — | Вес |
| attributes.length | number | Нет | — | Длина |
| attributes.width | number | Нет | — | Ширина |
| attributes.height | number | Нет | — | Высота |
| attributes.photo_url | string | Нет | 1000 | URL фотографии товара |
Режимы импорта
full_replace — Полная замена
Все ранее загруженные через API товары удаляются, затем создаются новые из переданного массива.
Подходит для полной синхронизации прайс-листа (например, ежедневная выгрузка из 1C).
ВниманиеТовары, добавленные вручную или через файл Excel, не удаляются.
upsert — Обновление / создание
Товары с external_id , которые уже существуют, обновляются. Новые товары создаются.
Подходит для частичных обновлений (например, изменение цен отдельных позиций).
ПримечаниеДля корректной работы режима upsert обязательно передавайте поле external_id — ваш уникальный артикул товара.
Коды ошибок
| HTTP код | Описание |
|---|---|
| 200 | Успешный запрос |
| 201 | Ресурс создан |
| 401 | Неверный или отсутствующий API-ключ |
| 422 | Ошибка валидации данных |
| 429 | Превышен лимит запросов (60/мин) |
| 500 | Внутренняя ошибка сервера |
Формат ошибки
{ "status": "error", "message": "Описание ошибки" }
Лимиты и ограничения
| Параметр | Значение |
|---|---|
| Товаров в одном запросе | до 5 000 |
| Запросов в минуту | 60 на один API-ключ |
| Количество API-ключей | без ограничений |
| Срок действия ключа | настраивается при создании (можно бессрочный) |
| Максимальный размер запроса | ~10 МБ |
Примеры кода
curl -X POST https://YOUR_DOMAIN/api/external/v1/products/import \ -H "Content-Type: application/json" \ -H "X-Api-Key: dsk_ваш_ключ_здесь" \ -d '{ "address_id": 1, "mode": "full_replace", "products": [ {"name": "Арматура A500 12мм", "price": 42500, "unit": "т", "external_id": "ARM-12"} ] }'
import requests API_URL = "https://YOUR_DOMAIN/api/external/v1/products/import" API_KEY = "dsk_ваш_ключ_здесь" payload = { "address_id": 1, "mode": "full_replace", "products": [ { "name": "Арматура A500 12мм", "price": 42500, "unit": "т", "external_id": "ARM-12", "attributes": {"weight": 0.888, "length": 11700} }, { "name": "Швеллер 16П", "price": 55800, "unit": "т", "external_id": "SHV-16P" } ] } response = requests.post( API_URL, json=payload, headers={ "X-Api-Key": API_KEY, "Content-Type": "application/json" } ) result = response.json() print(f"Статус: {result['status']}") print(f"Создано: {result['data']['imported']['created']}")
<?php $apiUrl = 'https://YOUR_DOMAIN/api/external/v1/products/import'; $apiKey = 'dsk_ваш_ключ_здесь'; $data = [ 'address_id' => 1, 'mode' => 'full_replace', 'products' => [ [ 'name' => 'Арматура A500 12мм', 'price' => 42500, 'unit' => 'т', 'external_id' => 'ARM-12', ], ], ]; $ch = curl_init($apiUrl); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ 'Content-Type: application/json', 'X-Api-Key: ' . $apiKey, ], CURLOPT_POSTFIELDS => json_encode($data), ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $result = json_decode($response, true); echo "HTTP {$httpCode}\n"; echo "Создано: " . ($result['data']['imported']['created'] ?? 0) . "\n";
// Формируем тело запроса ТелоЗапроса = Новый Структура; ТелоЗапроса.Вставить("address_id", 1); ТелоЗапроса.Вставить("mode", "full_replace"); МассивТоваров = Новый Массив; Для Каждого Товар Из СписокТоваров Цикл ДанныеТовара = Новый Структура; ДанныеТовара.Вставить("name", Товар.Наименование); ДанныеТовара.Вставить("price", Товар.Цена); ДанныеТовара.Вставить("external_id", Товар.Артикул); ДанныеТовара.Вставить("unit", Товар.ЕдиницаИзмерения); Атрибуты = Новый Структура; Атрибуты.Вставить("weight", Товар.Вес); ДанныеТовара.Вставить("attributes", Атрибуты); МассивТоваров.Добавить(ДанныеТовара); КонецЦикла; ТелоЗапроса.Вставить("products", МассивТоваров); // Сериализуем в JSON ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, ТелоЗапроса); СтрокаJSON = ЗаписьJSON.Закрыть(); // Отправляем запрос HTTPСоединение = Новый HTTPСоединение("YOUR_DOMAIN", 443, , , , , Новый ЗащищенноеСоединениеOpenSSL); Запрос = Новый HTTPЗапрос("/api/external/v1/products/import"); Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8); Запрос.Заголовки.Вставить("Content-Type", "application/json"); Запрос.Заголовки.Вставить("X-Api-Key", "dsk_ваш_ключ_здесь"); Ответ = HTTPСоединение.ОтправитьДляОбработки(Запрос); Сообщить("HTTP код: " + Ответ.КодСостояния); Сообщить("Ответ: " + Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));
Вам помогла статья?
Часто задаваемые вопросы
Что произойдёт с товарами, добавленными вручную, при full_replace ?
Ничего. Режим full_replace удаляет и заменяет только товары, ранее загруженные через API. Товары, добавленные вручную или через Excel, остаются без изменений.
Как узнать address_id ?
Зайдите в личный кабинет, раздел «Адреса». Там вы увидите список ваших адресов с их ID. Также можно получить список через API в будущих версиях.
Можно ли загружать более 5000 товаров?
Да, но разбейте прайс на несколько запросов по 5000 позиций. При первом запросе используйте mode: "full_replace" , а последующие — mode: "upsert" с external_id
Что делать при ошибке 429 (Too Many Requests)?
Подождите 1 минуту и повторите запрос. Лимит: 60 запросов в минуту на один API-ключ.
Зачем нужен external_id ?
Это ваш уникальный идентификатор товара (артикул, код из 1C и т.д.). Он позволяет обновлять существующие товары вместо создания дубликатов в режиме upsert .
Как автоматизировать ежедневную выгрузку?
Настройте в вашей системе (1C, cron, планировщик задач) ежедневную задачу, которая:
1. Формирует JSON с актуальным прайсом.
2. Отправляет POST-запрос на /api/external/v1/products/import с mode: "full_replace" .
Мобильное приложение ЖБИ
Более 100.000 изделий ЖБИ