Перейти к содержаниюСправка

Item. Номенклатура

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

Как получить ключ, как формируются запросы и какие бывают ответы и ошибки — в статье Общие сведения. Здесь описаны только особенности методов раздела item.

Методы

Метод Адрес Что делает
Получить товары /api/item Возвращает один товар или список товаров порциями
Создать или изменить товар /api/item/update Обновляет товар или создаёт новый
Массовое обновление /api/item/updateAll Создаёт или обновляет много товаров одним запросом
Загрузить изображения /api/item/importImages Скачивает изображения товаров по ссылкам

Где передавать параметры. Ключ apikey и формат format принимаются и в адресной строке, и в теле POST-запроса. Параметры поиска id и external_id и параметры enabled_only и create_if_not_exist в методах item, update и updateAll читаются только из адресной строки (GET). Остальные параметры можно передавать и в адресной строке, и в теле POST. Значения с кириллицей, пробелами и знаками + кодируйте.

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

GET https://[компания].myvirtualpos.ru/api/item?apikey=MySecret&limit=500&from_id=0&pricelist=1&images=1

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

id Число. Ид товара. Если указан, вернётся только он. Только GET
external_id Строка. Код товара во внешней системе (например, в 1С). Только GET
enabled_only 1 — только активные товары. Любое другое значение, включая 0, выдаёт все товары. Только GET
from_id Число. Вернуть товары с ид больше указанного. Служит для порционной выгрузки
limit Число, не более 10000. Максимальное количество товаров в ответе. Если не указан, в ответ собираются все товары
pricelist Ид прайслиста или internet (прайслист интернет-магазина). К каждому товару добавляются цены из этого прайслиста
images 1 — добавить к каждому товару список файлов изображений
manufacturer 1 — добавить название производителя
format json (по умолчанию) или xml

Товары сортируются по возрастанию ид.

Выгружайте порциями. Без limit метод собирает в одном ответе всю номенклатуру. При десятках тысяч товаров это долго и может закончиться ошибкой сервера. Выгружайте в цикле: запросите limit=1000&from_id=0, возьмите из ответа last_id и передайте его как from_id в следующем запросе. Выгрузка закончена, когда count в ответе меньше limit (или равен нулю).

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

success 1 — данные получены
type Тип данных, всегда item
flexfields Гибкие поля товара: соответствие attributeN и названия поля. Пустой список, если гибких полей нет. Значения в товарах приходят только для этих полей
last_id Число. Ид последнего товара в ответе; используйте как from_id в следующем запросе. 0, если товаров нет
total Число. Сколько товаров подходит под фильтр id, external_id, enabled_only, from_id — без учёта limit
count Количество товаров в ответе
items Список товаров. Каждый обёрнут в объект item

Поля товара

Пустые значения в JSON приходят как null, в XML — как пустой элемент.

id Число. Ид товара
external_id Строка. Код товара во внешней системе
name Строка. Название
description Строка. Описание
article Строка. Артикул
enabled Число. 1 — товар активен, 0 — заблокирован
type Строка. Тип: G — товар, M — материальная ценность, K — комплект
measurement_type Строка. Мерность: PIECE — штучный, WEIGHT — весовой, TAP — разливной
weight_good_flag Строка. Y или N: признак весового товара. Устарел, используйте measurement_type
sales_weight Число. Приоритет товара при продаже
volume Строка. Объём
vat_percent Число. Ставка НДС: 0, 10, 12, 18, 20 или -1 (без НДС)
not_show_in_shop Число. 1 — не показывать в интернет-витрине и мобильном приложении
html_template_id Число. Ид шаблона ценника
manufacturer_id Число. Ид производителя
group_ids Строка. Ид товарных групп через запятую
group_ext_ids Строка. Коды товарных групп во внешней системе через запятую
barcodes Строка. Штрихкоды через запятую
created_date, last_update_date Строка. Дата и время создания и последнего изменения, формат гггг-мм-дд чч:мм:сс
attribute1 … attribute15 Строка. Значения гибких полей. Приходят только те, что настроены (см. flexfields в ответе)

Дополнительные поля, если они запрошены:

images (images=1) Строка. Имена файлов изображений через запятую в порядке отображения
manufacturer_name (manufacturer=1) Строка. Название производителя
price, sale_price, price_old (pricelist) Строка. Цена, акционная цена и старая цена из прайслиста. Пусто, если товара нет в прайслисте

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

{
  "success": 1,
  "type": "item",
  "flexfields": { "attribute1": "Цвет" },
  "last_id": 8,
  "total": 2,
  "count": 2,
  "items": [
    {
      "item": {
        "id": 8,
        "external_id": "SKU-22222",
        "name": "Шампунь для волос",
        "description": "Увлажняющий шампунь",
        "article": "SH-1000",
        "enabled": 1,
        "sales_weight": 0,
        "volume": "1000.0000",
        "manufacturer_id": 1,
        "type": "G",
        "weight_good_flag": "N",
        "measurement_type": "PIECE",
        "not_show_in_shop": 0,
        "html_template_id": null,
        "group_ids": "1,2",
        "group_ext_ids": "GRP-1,GRP-2",
        "barcodes": "4607092441788,9785864153055",
        "vat_percent": 20,
        "created_date": "2026-07-11 17:34:58",
        "last_update_date": "2026-07-11 17:36:36",
        "attribute1": "Красный"
      }
    }
  ]
}

В примере опущены пустые гибкие поля. Тот же ответ при format=xml (сокращённо):

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <success>1</success>
  <type>item</type>
  <flexfields><attribute1>Цвет</attribute1></flexfields>
  <last_id>8</last_id>
  <total>2</total>
  <count>2</count>
  <items>
    <item>
      <id>8</id>
      <external_id>SKU-22222</external_id>
      <name>Шампунь для волос</name>
      <!-- остальные поля товара -->
    </item>
  </items>
</root>

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

Задача Запрос
Первые 1000 товаров /api/item?apikey=MySecret&limit=1000
Следующие 1000 после ид 1500 /api/item?apikey=MySecret&limit=1000&from_id=1500
Товар по коду из 1С /api/item?apikey=MySecret&external_id=SKU-22222
Активные товары с ценами и производителем /api/item?apikey=MySecret&limit=1000&enabled_only=1&pricelist=1&manufacturer=1
Цены интернет-магазина /api/item?apikey=MySecret&limit=1000&pricelist=internet
Товары с изображениями /api/item?apikey=MySecret&limit=500&images=1

Создание и изменение товара

POST https://[компания].myvirtualpos.ru/api/item/update?apikey=MySecret&external_id=SKU-22222&create_if_not_exist=1
name=Шампунь&type=G&vat_percent=20&barcodes=4607092441788,9785864153055

Товар ищется по id, а если он не указан — по external_id. Если товар не найден, а передан create_if_not_exist=1, создаётся новый. Изменяются только переданные параметры.

Параметры

id Число. Ид изменяемого товара. Только GET
external_id Строка. Код товара во внешней системе. Если id не указан, по нему ищется товар; одновременно это поле товара. Только GET
create_if_not_exist 1 — создать товар, если он не найден. Только GET. Для создания обязательно название name
name Строка. Название. Обязательно при создании
description Строка. Описание
article Строка. Артикул
enabled 1 — активен, 0 — заблокирован
type G — товар, M — материальная ценность, K — комплект
measurement_type PIECE, WEIGHT или TAP. Если не указан, можно передать устаревший weight_good_flag: Y даёт весовой товар, иначе штучный
sales_weight Целое число. Приоритет при продаже
volume Число. Объём
vat_percent Ставка НДС: 0, 10, 12, 18, 20 или -1
not_show_in_shop 1 — не показывать в интернет-витрине и мобильном приложении, 0 — показывать
html_template_id Число. Ид шаблона ценника; шаблон должен существовать
category_id Число. Ид товарной категории
ext_category_id Строка. Код категории во внешней системе; если категория найдена, заменяет category_id
manufacturer_id Число. Ид производителя
manufacturer_name Строка. Название производителя; используется, если не указан manufacturer_id. Если производителя с таким названием нет, он создаётся
group_ids Строка. Ид товарных групп через запятую. Заменяет текущий набор групп товара
group_ext_ids Строка. Коды товарных групп во внешней системе через запятую. Заменяет текущий набор групп
barcodes Строка. Штрихкоды через запятую. Заменяет текущий набор штрихкодов товара
picture_url Строка. Ссылка http или https на изображение jpg, png, gif или webp. Файл скачивается и становится изображением товара
attribute1 … attribute15 Значения гибких полей товара

Наборы групп и штрихкодов заменяются, а не дополняются. Если передан barcodes, штрихкоды, которых нет в списке, у товара удаляются. Так же работают group_ids и group_ext_ids. Если ни одной группы с указанными ид или кодами не существует, товар останется вообще без групп, а ошибки не будет. Чтобы не потерять данные, не передавайте эти параметры, если менять их не нужно.

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

Ответ

{"success":1,"id":"38331","isnew":"1","barcode_errors":"","barcode_conflicts":""}
success 1 — товар сохранён
id Ид товара. При создании приходит строкой, при изменении — числом
isnew «1» — товар создан, «0» — изменён существующий
barcode_errors Строка. Штрихкоды через запятую, не прошедшие проверку
barcode_conflicts Строка. Штрихкоды через запятую, которые уже принадлежат другим товарам

Массовое обновление

POST https://[компания].myvirtualpos.ru/api/item/updateAll?apikey=MySecret&create_if_not_exist=1
data=[{"external_id":"SKU-1","name":"Товар 1","article":"A1"},{"id":"1941","description":"Описание"}]

Параметр data — JSON-массив товаров. В каждом элементе укажите id или external_id и поля, которые нужно изменить, — те же, что и в методе update. Все товары обрабатываются независимо: ошибка в одном не отменяет остальные. Параметр create_if_not_exist (только GET) действует на все товары запроса.

success 1 — запрос обработан (даже если часть товаров не сохранена)
success_count Количество сохранённых товаров
fails_count Количество товаров с ошибками
problem_ids Товары, найденные по id, которые не удалось сохранить: объект problem_item с ид и текстом ошибки
problem_external_ids То же для товаров, найденных по external_id: объект problem_item с полями id (код) и info (текст ошибки)
{
  "success": 1,
  "success_count": 2,
  "fails_count": 2,
  "problem_ids": [ { "problem_item": { "id": "999999", "0": "Record not found" } } ],
  "problem_external_ids": [ { "problem_item": { "id": "NOPE", "info": "Record not found" } } ]
}

В problem_ids текст ошибки приходит под ключом 0, а не info. Чтобы сверять результаты по всем ошибкам, ориентируйтесь на fails_count.

Загрузка изображений

POST https://[компания].myvirtualpos.ru/api/item/importImages?apikey=MySecret
items=[{"id":1940,"urls":["https://example.com/a.jpg","https://example.com/b.jpg"]}]&rewrite_all=1
items JSON-массив объектов вида {id, urls}: id — ид товара, urls — ссылки на изображения. Не должен быть пустым
rewrite_all 1 — перезаписать существующие изображения товара загружаемыми

Ответ: {«success»:1}. При ошибке — success равный 0 и текст в поле info.

Ошибки

Ошибка авторизации и общие ошибки описаны в статье Общие сведения. Ошибки приходят с кодом HTTP 200 и success равным 0:

Сообщение Метод Причина Что делать
You have to specify [id] or [external_id] to update record. Or set [create_if_not_exist] to true to add new record update Нет id, external_id и create_if_not_exist Передайте идентификатор товара или create_if_not_exist=1
Record not found update Товар не найден, а create_if_not_exist не указан Проверьте идентификатор или передайте create_if_not_exist=1
Data validation failed. … update Данные не прошли проверку; далее перечень полей и причин: не заполнено название, неверный type, measurement_type, vat_percent, нецелый sales_weight Исправьте указанные поля
Cannot save data. … update Ошибка сохранения; например, html_template_id ссылается на несуществующий шаблон Проверьте ссылки на связанные записи
You have to specify 'data' as post parameter in JSON format … updateAll Не передан data Передайте JSON-массив в data
Параметр items должен быть непустым JSON-массивом объектов [{id, urls}] importImages items пуст или не JSON Передайте корректный JSON
Каждый элемент items должен содержать целочисленный id и непустой массив urls importImages Элемент без id или urls Проверьте элементы
Не удалось скачать файл: … importImages Ссылка недоступна Проверьте адрес

Если по условиям ничего не найдено, метод получения возвращает успешный ответ с count равным 0 и пустым списком items.

Связанные разделы