иконка россия RUB
zakaz@dsk-stolica.ru

zakaz@dsk-stolica.ru

Продолжая использовать наш сайт, вы соглашаетесь на обработку файлов Сookie. Вы можете заблокировать использование Cookies сайтом, изменив настройки Вашего браузера.

Подробнее

API импорта товаров

Картинка
Автор: ДСК-Столица
Дата создания: 05.08.2026
Изменён: 05.08.2026

Автоматизируйте загрузку прайс-листа из 1C, сайта или любой другой системы.


Содержание

Обзор возможностей

Быстрый старт

Аутентификация

Импорт товаров

Получение товаров

Удаление товаров

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

Режимы импорта

Коды ошибок

Лимиты и ограничения

Примеры кода

Часто задаваемые вопросы


Обзор возможностей

API позволяет автоматически загружать прайс-лист из вашей учётной системы (1C, ERP, сайт и т.д.) без ручного ввода или загрузки файлов.

  • Полная замена прайса — отправьте весь прайс, старые данные заменятся новыми
  • Частичное обновление — обновляйте только изменённые позиции по вашему артикулу
  • До 5000 товаров за запрос — загружайте крупные прайсы за один вызов
  • Атрибуты товаров — передавайте вес, размеры и другие характеристики
  • Логирование — полная история импортов доступна в личном кабинете

Быстрый старт

  1. Для регистрации в личном кабинете поставщика, Заполните форму
  2. Войдите в личный кабинет поставщика
  3. Перейдите в раздел Товары → API
  4. Создайте API-ключ и сохраните его
  5. Отправьте запрос на импорт (пример ниже)
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 изделий ЖБИ

Быстрый заказ Большой ассортимент Возможность заработать
qr-code Наведите камеру на QR-код, чтобы скачать приложение
По возрастанию цены По убыванию цены По рейтингу Актуальная цена В наличии Под заказ По длине По ширине По высоте По нагрузке По весу
Картинка

Товар добавлен в корзину