Загрузка остатков товаров с помощью API

Вернуться в «Мои остатки товаров»
Оглавление

Общая информация

API позволяет автоматизировать загрузку и обновление остатков товаров. Для взаимодействия с API используется авторизация по APIKey, который вы можете получить в личном кабинете, в разделе «Мои остатки товаров».

Получение API-ключа

  1. Перейдите в раздел «Мои остатки товаров» в личном кабинете.
  2. Активируйте способ загрузки «API». Способ загрузки «XML-фид» будет деактивирован автоматически.
  3. Нажмите кнопку «Сгенерировать API-ключ».
  4. Скопируйте «API-ключ» и используйте его при выполнении запросов.
Добавить фид в личном кабинете

Авторизация

Для авторизации запросов используется заголовок Authorization:

POST /api/v1/external/stocks HTTP/1.1
Host: https://лд.рф
Content-Type: application/json
Accept: application/json
Authorization: ApiKey <ВАШ_СГЕНЕРИРОВАННЫЙ_API_КЛЮЧ>

Эндпоинты API

POST Загрузка остатков

URL: /api/v1/external/stocks/import

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

Если цена не передана, имеет неверный формат или не больше нуля, устанавливается РРЦ товара. Если РРЦ отсутствует или равна нулю, устанавливается «Цена по запросу» независимо от переданной цены. Положительная цена не должна быть ниже РРЦ.

{
  "stocks": [
    {
      "productSku": "LD 47.300.15",
      "pointId": "А001",
      "quantity": 300,
      "price": 298.90,
      "name": "Кран шаровой латунный LD Pride 47.15.В-В.Б Ду 15 Ру 40 бабочка"
    },
    {
      "productSku": "11110509402MULD000000000",
      "pointId": "А002",
      "quantity": 25,
      "price": 3000.14,
      "name": "Кран шаровый LD КШЦФ из стали 20 Ду50 Ру4,0МПа"
    }
  ]
}

PUT Обновление количества товаров

URL: /api/v1/external/stocks/update/quantity

Предназначен для обновления количества товаров на указанном складе. В минуту можно отправить до 5 запросов. Сохранённая цена не меняется.

{
  "stocks": [
    {
      "productSku": "LD 47.300.15",
      "pointId": "А001",
      "quantity": 300
    },
    {
      "productSku": "11110509402MULD000000000",
      "pointId": "А002",
      "quantity": 25
    }
  ]
}

PUT Обновление цены товара

URL: /api/v1/external/stocks/update/price

Позволяет обновить цену конкретного товара на определённом складе. В минуту можно отправить до 5 запросов. Поле price обязательно.

{
  "stocks": [
    {
      "productSku": "LD 47.300.15",
      "pointId": "А001",
      "price": 1298.90
    },
    {
      "productSku": "11110509402MULD000000000",
      "pointId": "А002",
      "price": 1398.90
    }
  ]
}

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

{
  "result": [
    {
      "productSku": "LD 47.300.15",
      "pointId": "А001",
      "updated": true,
      "errors": []
    },
    {
      "productSku": "11110509402MULD000000000",
      "pointId": "А002",
      "updated": false,
      "errors": [
        { "code": "SKU_NOT_FOUND", "message": "Товар с указанным productSku не найден." },
        { "code": "POINT_NOT_FOUND", "message": "Указанная Вами точка продаж не найдена." },
        { "code": "EMPTY_QUANTITY", "message": "Количество товара на складе не указано или равно нулю." },
        { "code": "EMPTY_PRICE", "message": "Цена товара не указана или равна нулю." }
      ]
    }
  ]
}

Пример ответа при ошибках аутентификации

HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
  "code": "INVALID_APIKEY_FORMAT",
  "message": "Неверный формат API-ключа (ожидается GUID)"
}

Поля запроса

Каждый элемент массива stocks должен содержать поля, необходимые для выбранной операции.

Поле Тип Описание
productSku string Артикул товара. Используется для идентификации товара в системе.
pointId string Идентификатор торговой точки, на которую выгружается товар.
quantity integer Остаток товара. Обязателен при загрузке и обновлении количества. Значение должно быть больше нуля.
price float Цена товара. Необязательна при загрузке остатков. При обновлении цены требуется положительное значение не ниже РРЦ.

Возможные статусы ошибок

Код Описание Рекомендации
400
Bad Request
Неверный запрос или некорректные данные. Проверьте наличие непустого массива stocks и обязательных полей выбранной операции.
Убедитесь, что данные отправлены в правильном JSON-формате и соответствуют ожидаемым типам данных.
401
Unauthorized
Отсутствует или некорректный API-ключ. Проверьте правильность API-ключа, указанного в заголовке Authorization.
403
Forbidden
Доступ к ресурсу запрещён. Убедитесь, что способ загрузки через API активирован в вашем личном кабинете и у вас есть необходимые права доступа.
404
Not Found
Указанный эндпоинт не существует. Проверьте URL-адрес запроса на корректность и отсутствие опечаток.
429
Too Many Requests
Превышено допустимое количество запросов. Снизьте частоту отправки запросов. Максимум — 5 запросов в минуту.
500
Internal Server Error
Внутренняя ошибка сервера. Повторите запрос через некоторое время. Если ошибка сохраняется, свяжитесь с вашим менеджером или отправьте обращение через форму обратной связи.
504
Gateway Timeout
Время ожидания ответа от сервера истекло. Сервер не успел обработать запрос в установленный лимит (5 минут).
Повторите запрос через некоторое время. Если ошибка сохраняется, свяжитесь с вашим менеджером или отправьте обращение через форму обратной связи.

Ограничения

  • Не более 5 запросов в минуту. В случае превышения, доступ может быть временно заблокирован.
  • Максимальное время ожидания ответа от API — 5 минут. Если за это время сервер не ответит, запрос будет завершён с ошибкой таймаута. Пожалуйста, учитывайте это в своих интеграциях.

Список возможных ошибок валидации

Код ошибки Описание ошибки Что делать?
EMPTY_SKU Не указан обязательный артикул товара (SKU) Укажите артикул товара (SKU) в соответствии с требованиями API
SKU_NOT_FOUND Товар с указанным артикулом не найден Проверьте правильность артикула и наличие товара в системе
EMPTY_POINT_ID Не указан идентификатор точки продаж (pointId) Укажите идентификатор точки продаж (pointId) в соответствии с требованиями API
POINT_NOT_FOUND Указанная точка продаж не найдена Убедитесь, что выбранная точка продаж существует
INVALID_POINT_ID pointId имеет неверный формат (ожидается формат вида A001) Исправьте формат идентификатора, следуя примеру (например, A001)
INVALID_FIRST_LETTER Первая буква pointId должна быть латинской (A–Z) Исправьте формат идентификатора, следуя примеру (например, A001)
EMPTY_QUANTITY Количество товара в точке продаж не указано или равно нулю Заполните поле количества товара
INVALID_QUANTITY Количество должно быть строго больше 0 Укажите положительное количество, больше 0
INVALID_QUANTITY_FORMAT Количество указано неверно Введите корректное числовое значение для количества
INVALID_QUANTITY_TYPE Количество указано неверно (не является целым числом) Введите корректное числовое значение для количества
EMPTY_PRICE Цена товара не указана или равна нулю Заполните поле цены, убедившись, что значение больше нуля
INVALID_PRICE_FORMAT Цена указана неверно Введите корректное числовое значение для цены
PRICE_BELOW_MIN Указанная цена ниже РРЦ Проверьте, чтобы цена не была ниже минимально допустимой

Ошибки аутентификации

При ошибках в заголовке авторизации сервис вернёт HTTP 401 Unauthorized и один из следующих кодов.

Код ошибки Описание Рекомендации
HEADER_MISSING API-ключ не передан в заголовке Authorization Укажите в запросе заголовок
Authorization: ApiKey <ВАШ_КЛЮЧ>
INVALID_HEADER_FORMAT Заголовок Authorization имеет неверный формат Убедитесь, что заголовок начинается с префикса ApiKey
INVALID_APIKEY_FORMAT Неверный формат API-ключа (ожидается GUID) Проверьте, что ключ соответствует GUID
APIKEY_NOT_FOUND API-ключ не найден или неактивен Проверьте, что ключ сгенерирован и активирован в личном кабинете
USER_NOT_FOUND Пользователь не найден для переданного API-ключа Убедитесь, что ключ привязан к существующему пользователю

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

Для авторизации запросов используется заголовок Authorization:

POST /api/v1/external/export/products HTTP/1.1
Host: https://лд.рф
Content-Type: application/json
Accept: application/json
Authorization: ApiKey <ВАШ_СГЕНЕРИРОВАННЫЙ_API_КЛЮЧ>

POST Получение списка товаров

URL: /api/v1/external/export/products

Данный эндпоинт позволяет получить данные о всех товарах на сайте лд.рф и их связанные атрибуты.

Можно запросить: идентификаторы товаров, цены РРЦ, персональные цены и МОЦ, артикулы, наименования, свойства, связанные файлы и изображения, а также остатки на доступных складах.
Для оптимизации объёма данных укажите только необходимые поля в массиве SELECT.

Если выполнить запрос без тела запроса, в ответе для каждого товара будет возвращён только один параметр — productSku.

Тело запроса (опционально):

{
  "SELECT": [
    "id",
    "price",
    "prices",
    "productSku",
    "name",
    "properties",
    "documents",
    "pictures",
    "warehouseStocks"
  ]
}
  • id — идентификатор товара
  • price — цена РРЦ. Если цена отсутствует или на сайте указано «По запросу», возвращается null
  • prices — цены товара: персональная цена, МОЦ и РРЦ
  • productSku — артикул товара
  • name — наименование товара
  • properties — свойства товара
  • documents — подробная информация о файлах: название, ссылка для скачивания, размер и расширение
  • files — файлы. Поле устарело, но оставлено для обратной совместимости; используйте новое поле documents
  • pictures — изображения
  • warehouseStocks — остатки товара по доступным складам

В ответе будут только те поля, которые вы указали в SELECT.

Поля files и documents возвращаются вместе только при явном указании их в SELECT.

В поле warehouseStocks возвращаются остатки товара по доступным складам. Показываются только положительные остатки. Если остатков нет, список будет пустым.

В поле prices возвращаются цены товара, доступные вашей учётной записи на сайте, в порядке: персональная цена, МОЦ, РРЦ. Персональная цена и МОЦ показываются, только если они установлены. РРЦ показывается всегда. Если РРЦ отсутствует или на сайте указано «По запросу», для неё возвращается "price": null.

Поле Тип Описание
priceType string Код типа цены: personal — персональная цена, moc — МОЦ, retail — РРЦ.
priceTypeName string Полное название типа цены, например «Рекомендуемая розничная цена».
priceTypeNameShort string Короткое название типа цены, как на сайте, например «РРЦ».
price float Цена в рублях. Для РРЦ может быть null, если цена отсутствует или на сайте указано «По запросу».

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

{
  "products": [
    {
      "id": 1,
      "price": 196378,
      "prices": [
        {
          "priceType": "personal",
          "priceTypeName": "Персональная цена",
          "priceTypeNameShort": "Ваша цена",
          "price": 108007.9
        },
        {
          "priceType": "moc",
          "priceTypeName": "Минимальная оптовая цена",
          "priceTypeNameShort": "МОЦ",
          "price": 137464.6
        },
        {
          "priceType": "retail",
          "priceTypeName": "Рекомендуемая розничная цена",
          "priceTypeNameShort": "РРЦ",
          "price": 196378
        }
      ],
      "productSku": "11111509251RGLD000000000",
      "name": "Кран шаровый LD КШЦФР Gas 150/125.025.Н/П.01. из стали 12Х18Н10Т Ду150/125 Ру2,5МПа с редуктором",
      "properties": [
        {
          "name":"Тип продукта",
          "value":"Кран шаровой"
        },
        {
          "name":"Серия",
          "value":"LD"
        },
        {
          "name":"Рабочая среда",
          "value":"Газ"
        }
      ],
      "documents": [
        {
          "name": "Технический паспорт.pdf",
          "downloadUrl": "https://xn--d1an.xn--p1ai/api/v1/external/document/Zr7upTWBFFWsgbr5/8d1f7e80-997b-11ee-89ce-005056a4b6de.pdf",
          "size": 758952,
          "formattedSize": "741,16 КБ",
          "type": "pdf"
        }
      ],
      "pictures": [
        "https://xn--d1an.xn--p1ai/api/v1/external/product-images/_pMQnb-CWY4saJem/bbe/bbe018b25a032512e1a03985cb2f0ec8.png"
      ],
      "warehouseStocks": [
        {
          "warehouseId": 1,
          "warehouseName": "Склад Челябинск",
          "availableQuantity": 12
        },
        {
          "warehouseId": 2,
          "warehouseName": "Склад Москва",
          "availableQuantity": 15
        }
      ]
    }
  ]
}

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

Код Описание Рекомендация
400 Некорректное значение в поле SELECT Проверьте список доступных полей
401 Ошибка авторизации Проверьте API-ключ
403 Доступ к API запрещён Проверьте настройки API в личном кабинете
500 Внутренняя ошибка сервера Повторите попытку позже

Получение списка доступных складов

Для авторизации запросов используется заголовок Authorization:

GET /api/v1/external/export/warehouses HTTP/1.1
Host: https://лд.рф
Accept: application/json
Authorization: ApiKey <ВАШ_СГЕНЕРИРОВАННЫЙ_API_КЛЮЧ>

GET Получение списка доступных складов

URL: /api/v1/external/export/warehouses

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

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

{
  "warehouses": [
    {
      "warehouseId": 1,
      "warehouseName": "Склад Челябинск"
    },
    {
      "warehouseId": 2,
      "warehouseName": "Склад Москва"
    }
  ]
}

Если доступных складов нет, метод вернёт пустой список.

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

Код Описание Рекомендация
401 Ошибка авторизации Проверьте API-ключ
403 Доступ к API запрещён Проверьте настройки API в личном кабинете