Получение остатков через сервис API
Инструкция для клиентов B2B-портала остатков Компании Варум.
1. Что понадобится и безопасность
Для работы с порталом и API вам понадобится ключ доступа — в запросах и в адресе портала он передаётся как параметр client_secret.
Ключ можно получить у вашего менеджера или запросить по почте zapros@warum.ru.
Только HTTPS — адрес должен начинаться с https://.
2. Что вы получите
По защищённому запросу сервер отдаёт список позиций со склада: артикулы, названия, количества, цену для вашего портала и время обновления. Формат ответа на выбор — XML (удобно для 1С и учётных систем) или JSON (удобно для сайтов и скриптов).
3. Два адреса: таблица в браузере и API для программ
Один и тот же ключ (client_secret) работает в двух местах, но пути разные:
- Портал — обычная страница с таблицей. Откройте https://warum.ru/stock и добавьте ключ:
https://warum.ru/stock?client_secret=ВАШ_КЛЮЧ(подставьте свой ключclient_secret). Это не API: здесь нет параметраmethod, ответ — HTML. - API для выгрузки — машиночитаемый ответ. Базовый адрес:
https://warum.ru/stock/api. Параметры перечисляют после?: обязательноmethodиclient_secret, остальное — по задаче (см. разделы ниже).
Если ключ на портале не указан или неверен, страница сообщит об ограничении доступа. При неверном ключе к API придёт ответ с кодом 401.
/stock/api (раздел 4).
4. Быстрая проверка работы API в браузере
Чтобы убедиться, что ключ подходит к API, один раз откройте ссылку (подставьте свой ключ):
# Вместо ВАШ_КЛЮЧ — подставьте в параметр свой ключ client_secret https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ&format=json
- При верном ключе (и при наличии открытых для вас категорий и товаров на стороне Компании Варум) отобразится текст ответа в JSON.
- При неверном или пустом ключе — сообщение об ошибке (обычно код 401).
5. Как устроен запрос к API
- Разрешён только GET (как переход по ссылке или скачивание по URL).
- В строке запроса задают имя метода и ключ:
GetStock— остатки по всем открытым вам категориям (с опциональными фильтрами).GetStockByCategory— остатки только одной категории; обязателен параметрcategory=(ID или точное имя).GetCategories— список категорий, доступных ключу (чтобы подставлятьcategoryв другие методы).
- Для
GetStockиGetStockByCategoryможно задавать формат, наличие, артикул, валюту, пагинацию. ДляGetCategoriesобычно достаточно ключа и при необходимостиformat=json.
6. Метод GetStock
| Параметр | Нужен ли | Что значит |
|---|---|---|
method |
обязательно | Всегда GetStock. |
client_secret |
обязательно | Ключ портала (тот же, что в ссылке на /stock). |
format |
необязательно | xml — по умолчанию; json — JSON. |
available |
необязательно | 0 — все строки; 1 — только при количестве > 0. |
category |
необязательно | Фильтр: числовой category_id или точное имя категории из выдачи. |
sku |
необязательно | Поиск по вхождению в артикул (по части артикула). До 128 символов. Для точного поиска предпочтительнее sku_exact. |
sku_exact |
необязательно | Точное совпадение поля sku удобно для артикула целиком, если вы уверены в его существовании. Если sku_exact непустой, параметр sku для фильтра игнорируется. До 128 символов. |
limit |
необязательно | Строк за один ответ (по умолчанию 2000, максимум 5000). |
offset |
необязательно | Смещение для пагинации: 0 — с начала, далее увеличивайте шагами по limit. |
currency |
необязательно | USD — по умолчанию. RUB — цена в рублях по курсу ЦБ (в meta будет usd_rub_rate). |
7. Метод GetStockByCategory
Те же поля, что у GetStock, но выборка только из одной категории, если она разрешена вашему ключу. Без category сервер вернёт 400.
| Параметр | Нужен ли | Что значит |
|---|---|---|
method |
обязательно | GetStockByCategory. |
client_secret |
обязательно | Ключ портала. |
category |
обязательно | Числовой category_id (из GetCategories или строк остатков) или точное имя категории. Если категория вам не открыта — список пустой, в hint может быть пояснение. |
format, available, sku, sku_exact, limit, offset, currency |
необязательно | Как в таблице метода GetStock. |
# Остатки только категории с id 133, JSON https://warum.ru/stock/api?method=GetStockByCategory&client_secret=ВАШ_КЛЮЧ&category=133&format=json # Или https://warum.ru/stock/api?method=GetStockByCategory&client_secret=ВАШ_КЛЮЧ&category=Ноутбуки&format=json
8. Метод GetCategories
Возвращает категории, открытые вашему порталу, с category_id и category_name. Удобно для подстановки category=… в GetStock или GetStockByCategory.
| Параметр | Нужен ли | Что значит |
|---|---|---|
method |
обязательно | GetCategories. |
client_secret |
обязательно | Тот же ключ, что для остальных методов. |
format |
необязательно | xml (по умолчанию) или json. |
Ответ. В XML — узел categories с элементами item (category_id, category_name). В JSON — массив categories. Если ни одна категория не включена в настройках портала, список пустой, возможен hint.
# Пример одного элемента categories в XML (не строка остатков) <item> <category_id>133</category_id> <category_name>Ноутбуки</category_name> </item>
9. Что приходит в ответе
В успешном ответе (XML или JSON) обычно есть:
generated_at— время формирования ответа (московское).meta— имя и e-mail портала. ДляGetStockиGetStockByCategoryдополнительно:currencyи приRUB—usd_rub_rate. ДляGetCategoriesвmetaтолько контакты.hint— необязательная текстовая подсказка; в JSON поле выводится только если есть текст (при отсутствии подсказки ключа нет, в отличие отnull).stock(GetStock,GetStockByCategory) — позиции:product_id,category_id,category_name,sku,product_name,vendor,quantity,in_reserve,price,updated.categories(GetCategoriesтолько) — список категорий сcategory_idиcategory_name.
10. Примеры готовых ссылок
В блоках ниже первая строка в рамке — комментарий, вторая — адрес. Подставьте свой ключ вместо ВАШ_КЛЮЧ.
Пример A. Все доступные позиции (GetStock)
# Все доступные позиции (формат XML по умолчанию) https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ
При необходимости добавьте limit и offset — сколько строк за один ответ и сколько пропустить с начала списка (см. таблицу параметров GetStock).
# Пагинация: по 100 позиций на запрос (первая страница) https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ&limit=100&offset=0
limit=100— не больше 100 строк в этом ответе.offset=0— начать с первой записи; для следующей «страницы» по 100 позиций укажитеoffset=100, затем200,300и т.д. при том жеlimit=100.- Можно задать другой размер порции, например
limit=500: тогда вторая порция —offset=500, третья —offset=1000(максимум строк за запрос по правилам API — 5000).
Пример B. Только в наличии (quantity > 0), JSON
# available=1 и формат json https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ&available=1&format=json
Пример C. Поиск по артикулу (sku / sku_exact)
# Подстрока в артикуле (LIKE - по части артикула) https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ&sku=MW1&format=json
# Точное совпадение артикула https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ&sku_exact=BE400-RS&format=json
К поиску по части артикула (sku) можно добавить цены в рублях — currency=RUB (см. пример E):
https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ&sku=MW1¤cy=RUB&format=json
Пример D. Фильтр GetStock по категории (числовой id)
# Подставьте реальный category_id из выдачи https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ&category=123&format=json
Пример E. Цены в рублях (весь список, без фильтра sku)
# price в RUB; курс в meta (usd_rub_rate) https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ¤cy=RUB&format=json
Пример F. Список категорий в JSON
# Для подстановки в GetStock / GetStockByCategory https://warum.ru/stock/api?method=GetCategories&client_secret=ВАШ_КЛЮЧ&format=json
/stock/api), затем знак вопроса ? — после него перечисляют настройки запроса: каждая настройка в виде имя=значение, настройки отделяют друг от друга символом & (читается как «и»). Так выглядит обычная ссылка для браузера, почты или программы.Если эту же ссылку вставляете в HTML (страница сайта, письмо в разметке): символ
& в коде нужно записывать как & — это правило HTML, иначе разметка может «сломаться». В адресной строке, в 1С, в Postman и в curl по-прежнему используйте обычный &.
11. Коды HTTP при ошибках
| Ситуация | Код | Что увидите |
|---|---|---|
| Ключ не передан или неверный | 401 | XML: ошибка Unauthorized; JSON: "error":"Unauthorized". |
| Метод не указан или неизвестен | 400 | Нужен один из: GetStock, GetStockByCategory, GetCategories. |
GetStockByCategory без category |
400 | Нужен непустой category. |
| Не GET (например POST) | 405 | Текст: разрешён только GET. |
currency не USD и не RUB |
400 | Сообщение в теле ответа. |
currency=RUB, курс на сервере недоступен |
503 | Сообщение о недоступности курса USD/RUB. |
| Превышен лимит запросов (защита от перегрузки) | 429 | Too Many Requests; заголовок Retry-After: 60 — повторите через минуту. Лимиты действуют на ключ (валидный client_secret) и на IP. |
12. Для специалиста: curl и Postman
Отдельная «проверка» здесь не обязательна: ключ и ответ API уже можно проверить в браузере (раздел 4). curl и Postman удобны, когда нужен терминал (сервер без браузера, SSH), скрипт или повторяемый запрос с разными параметрами, а также когда важно сразу увидеть код ответа HTTP и заголовки.
curl (часто уже есть в Linux, macOS; в Windows — в PowerShell как алиас или через WSL):
# Кавычки вокруг URL — чтобы & в адресе не восприняла оболочка как свой оператор curl -sS "https://warum.ru/stock/api?method=GetStock&client_secret=ВАШ_КЛЮЧ&format=json"
В консоль выведется тело ответа (JSON или XML).
Postman (или аналог — Insomnia, Bruno): API и т.д. Создайте запрос GET, вставьте полный URL, как в разделах 4 и 10, либо укажите базовый адрес https://warum.ru/stock/api и во вкладке параметров добавьте method, client_secret и при необходимости format=json. В ответе будут тело, статус (например 200 или 401) и заголовки.
13. Частые вопросы
Почему в браузере «каша» символов вместо таблицы?
Так выглядит ответ API (XML/JSON). Таблицу для людей откройте на /stock?client_secret=…. Для автоматической загрузки используйте учётную систему или скрипт.
Можно ли вызывать сервис по HTTP без шифрования?
Нет: ключ нельзя передавать открытым текстом. Используйте только https://warum.ru/stock/api.
Много позиций — как забрать всё?
Частями: задайте limit (например 2000) и увеличивайте offset (0, 2000, 4000, …), пока список не опустеет.
Документ подготовлен для клиентов портала остатков Компании Варум.
