WB: получить товар по URL

GET /wb/api/v1/item/by-url

Парсит один товар Wildberries по URL и возвращает JSON c данными карточки.

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

ПараметрТипОбязательныйОписание
url string да URL детальной карточки WB: https://www.wildberries.ru/catalog/<nm_id>/detail.aspx.

Заголовки

ЗаголовокОбязательныйОписание
X-API-Token да Ваш API‑токен портала. Альтернативно можно использовать query‑параметр apiToken.

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

cURL
curl -X GET \
  "https://bhapi.ru/wb/api/v1/item/by-url?url=https://www.wildberries.ru/catalog/12345/detail.aspx" \
  -H "X-API-Token: ВАШ_API_TOKEN"

Успешный ответ 200 OK

JSON
{
  "status": "ok",
  "data": {
    "code": 200,
    "msg": "success",
    "data": {
      "item_id": 770596537,
      "product_url": "https://www.wildberries.ru/catalog/770596537/detail.aspx?targetUrl=MI",
      "title": "Смартфон M17 Pro Max 22+2048ГБ 2 nano-SIM+micro-SD",
      "currency": "RUB",
      "price_info": { },
      "main_imgs": [
        "https://basket-36.wbbasket.ru/vol7705/part770596/770596537/images/big/1.webp",
        "... другие URL ..."
      ],
      "additional_imgs": [ ],
      "complectation": "смартфоны; защитный чехол; кабель USB Type-C; зарядное устройство; ...",
      "category_name": "Смартфоны",
      "category_path": "Смартфоны и гаджеты",
      "product_props": {
        "Модель": "17 Pro Max",
        "Цвет": "черный",
        "Объем встроенной памяти (Гб)": "2 ТБ",
        "Суммарный объем оперативной памяти (Гб)": "22ГБ",
        "...": "..."
      },
      "shop_info": {
        "shop_name": "",
        "shop_id": "250077302",
        "seller_id": "250077302"
      },
      "review_info": { },
      "desc": "Модель: M17 Pro Max\nЗадняя крышка: ...",
      "source": "wildberries",
      "availability": "in_stock"
    }
  },
  "saved_path": null
}

WB: каталог продавца по ссылке

POST /wb/api/v1/seller/catalog

Возвращает каталог товаров конкретного продавца Wildberries по ссылке на магазин /seller/<id>.

Тело запроса

ПолеТипОбязательныйОписание
url string да URL продавца WB: https://www.wildberries.ru/seller/<supplier_id>.
page integer нет Номер страницы каталога продавца, по умолчанию 1.

Заголовки

ЗаголовокОбязательныйОписание
X-API-Token да Ваш API‑токен портала. Альтернативно можно использовать query‑параметр apiToken.

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

cURL
curl -X POST "https://bhapi.ru/wb/api/v1/seller/catalog" \
  -H "Content-Type: application/json" \
  -H "X-API-Token: ВАШ_API_TOKEN" \
  -d '{"url":"https://www.wildberries.ru/seller/4190071","page":1}'

Успешный ответ 200 OK

JSON
{
  "status": "ok",
  "data": {
    "code": 200,
    "msg": "success",
    "data": {
      "supplier_id": 4190071,
      "page": 3,
      "products_count": 100,
      "per_page": 100,
      "max_pages": 5,
      "total": 490,
      "wb": {
        "products": [
          {
            "id": 277304775,
            "name": "Мотор насос омывателя 2101-2107 2121"
          }
        ]
      }
    }
  }
}

Обёртка ответа парсера WB

Парсер WB, как правило, возвращает данные в двух уровнях: внешний уровень портала BHAPI и внутренний уровень самого парсера.

ПолеТипОписание
status string Статус верхнего уровня портала: обычно "ok" или "error".
data object Полезная нагрузка. Для одиночного товара содержит поля code, msg, data.
saved_path string | null Если парсер сохраняет результат на диск, здесь может быть путь к файлу (чаще null).

Во внутреннем объекте data для одиночного товара структура такая:

ПолеТипОписание
codeintegerКод результата парсера (200 — успех, другие — ошибки на стороне WB/парсера).
msgstringТекстовое описание результата ("success" или сообщение об ошибке).
dataobjectКарточка товара WB (см. раздел «Карточка товара» ниже).

Карточка товара WB

Ниже приведена укрупнённая структура объекта data для одиночного товара.

ПолеТипОписание
item_idintegerИдентификатор товара WB (nm_id).
product_urlstringURL детальной карточки товара.
titlestringНазвание товара.
currencystringКод валюты, как правило RUB.
price_infoobjectЦеновая информация (может быть пустым объектом, структура зависит от версии WB API).
main_imgsstring[]Массив URL основных изображений товара.
additional_imgsstring[]Дополнительные изображения (если есть).
complectationstringКомплектация из карточки товара.
category_namestringНазвание категории.
category_pathstringПуть до категории (цепочка разделов).
product_propsobjectСловарь характеристик «название → значение» (объём памяти, цвет, ОС и т.п.).
shop_infoobjectИнформация о продавце (см. ниже).
review_infoobjectИнформация по отзывам (может быть пустым объектом).
descstringТекстовое описание товара.
sourcestringИсточник данных, обычно "wildberries".
availabilitystringСтатус наличия: "in_stock", "not_available" и т.п.

ShopInfo — информация о продавце

ПолеТипОписание
shop_namestringОтображаемое название магазина (может быть пустой строкой).
shop_idstringИдентификатор магазина WB.
seller_idstringИдентификатор продавца (может совпадать с shop_id).

Структура результата поиска

Объект data в ответе на /wb/api/v1/search детализированно описан ниже.

ПолеТипОписание
querystringИсходный поисковый запрос.
pageintegerНомер текущей страницы.
totalintegerОбщее число найденных товаров по всем страницам.
linksstring[]Массив URL карточек товаров на текущей странице.
countintegerКоличество элементов в массиве links.
productsobject[]Массив кратких описаний товаров.

Элемент products[i]

ПолеТипОписание
idintegernm_id товара WB.
linkstringURL детальной карточки товара.
pricefloat | nullТекущая цена в рублях (может быть null).
ratingfloat | nullРейтинг по отзывам.
feedbacksinteger | nullКоличество отзывов/оценок.
descriptionstring | nullКраткое текстовое описание товара.

Коды ошибок

Типичные коды ошибок при работе с парсером WB через портал BHAPI:

КодHTTPОписаниеЧто делать
401 Unauthorized Токен не передан или невалиден. Проверьте заголовок X-API-Token или параметр apiToken, при необходимости создайте новый токен.
403 Forbidden Нет активной подписки на парсер WB или токен деактивирован. Проверьте тарифы и статус токена в личном кабинете.
404 Not Found Товар не найден (удалён, скрыт или неверный URL). Убедитесь, что URL ведёт на существующую карточку WB и содержит корректный nm_id.
422 Unprocessable Entity Ошибка валидации параметров запроса. Проверьте обязательные параметры (url или q), числовые фильтры и формат значений.
429 Too Many Requests Превышен лимит запросов по тарифу или ограничение скорости. Уменьшите частоту запросов, используйте кэширование и проверьте лимиты в кабинете.
500 Internal Server Error Внутренняя ошибка сервиса. Повторите запрос позже, при постоянной проблеме свяжитесь с поддержкой.

Лимиты и квоты

Парсер WB использует общую систему лимитов портала BHAPI. У каждого токена есть дневной и общий лимит, а также защита от слишком частых запросов.

Тип лимитаОписаниеСброс / поведение
Дневной лимит Максимальное количество запросов к парсеру WB в сутки. Сбрасывается ежедневно по UTC. После исчерпания возвращается ошибка 429.
Общий лимит Суммарное количество запросов за всё время жизни токена. Не сбрасывается. При достижении лимита необходимо создать новый токен или изменить тариф.
Rate limit Защита от слишком частых запросов подряд (ограничение скорости). Рекомендуется делать паузу 1–2 секунды между запросами, особенно при массовом парсинге.
Совет. Используйте поиск и массовый сбор ссылок батчами, а затем обрабатывайте их с задержками, чтобы не упираться в ограничения WB и квоты портала.

Примеры: Python

Получить один товар по URL

Python — requests
import requests

API_URL = "https://bhapi.ru/wb/api/v1/item/by-url"
TOKEN = "ВАШ_API_TOKEN"

params = {
    "url": "https://www.wildberries.ru/catalog/770596537/detail.aspx",
}

response = requests.get(API_URL, params=params, headers={"X-API-Token": TOKEN}, timeout=30)
payload = response.json()

if payload["status"] == "ok" and payload["data"]["code"] == 200:
    item = payload["data"]["data"]
    print("ID товара:", item["item_id"])
    print("Название:", item["title"])
    print("Категория:", item["category_name"])
    print("Картинок:", len(item["main_imgs"]))
else:
    print("Ошибка:", payload)

Поиск по каталогу и вывод топа

Python — поиск
import requests

SEARCH_URL = "https://bhapi.ru/wb/api/v1/search"
TOKEN = "ВАШ_API_TOKEN"

params = {
    "q": "аэрогриль объем 8 литров",
    "page": 1,
    "max_links": 10,
}

response = requests.get(SEARCH_URL, params=params, headers={"X-API-Token": TOKEN}, timeout=30)
payload = response.json()

data = payload["data"]
print(f"Всего найдено товаров: {data['total']}")
print(f"Показано на странице: {data['count']}")

for product in data["products"]:
    print(
        f"{product['id']}: {product['price']} ₽, "
        f"рейтинг {product['rating']}, отзывов {product['feedbacks']}"
    )

Примеры: cURL

Получить товар по URL

cURL
curl -X GET \
  "https://bhapi.ru/wb/api/v1/item/by-url?url=https://www.wildberries.ru/catalog/770596537/detail.aspx" \
  -H "X-API-Token: ВАШ_API_TOKEN"

Поиск по каталогу

cURL
# Базовый поиск
curl "https://bhapi.ru/wb/api/v1/search?q=кроссовки&apiToken=ВАШ_API_TOKEN"

# Страница 2, ограничение по количеству ссылок
curl "https://bhapi.ru/wb/api/v1/search?q=зимние%20ботинки&page=2&max_links=50&apiToken=ВАШ_API_TOKEN"

Примеры: JavaScript

Fetch API (браузер / Node.js 18+)

JavaScript
const TOKEN = "ВАШ_API_TOKEN";
const BASE_URL = "https://bhapi.ru";

async function getWbItem(productUrl) {
  const params = new URLSearchParams({ url: productUrl });

  const response = await fetch(`${BASE_URL}/wb/api/v1/item/by-url?${params}`, {
    method: "GET",
    headers: { "X-API-Token": TOKEN },
  });

  const payload = await response.json();

  if (payload.status === "ok" && payload.data.code === 200) {
    return payload.data.data;
  }

  console.error("Ошибка WB:", payload);
  return null;
}

getWbItem("https://www.wildberries.ru/catalog/770596537/detail.aspx")
  .then((item) => {
    if (!item) return;
    console.log("Название:", item.title);
    console.log("Категория:", item.category_name);
    console.log("Первая картинка:", item.main_imgs[0]);
  });

Примеры: PHP

Получить товар по URL (PHP + cURL)

PHP
<?php

$apiUrl = "https://bhapi.ru/wb/api/v1/item/by-url";
$token  = "ВАШ_API_TOKEN";

$productUrl = "https://www.wildberries.ru/catalog/770596537/detail.aspx";

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            => $apiUrl . "?" . http_build_query(["url" => $productUrl]),
    CURLOPT_HTTPHEADER     => ["X-API-Token: " . $token],
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT        => 30,
]);

$response = curl_exec($ch);
curl_close($ch);

$payload = json_decode($response, true);

if ($payload["status"] === "ok" && $payload["data"]["code"] === 200) {
    $item = $payload["data"]["data"];
    echo "Товар: " . $item["title"] . PHP_EOL;
    echo "Категория: " . $item["category_name"] . PHP_EOL;
} else {
    var_dump($payload);
}

Пакетная обработка (пример скрипта)

Ниже пример простого Python‑скрипта, который сначала выполняет поиск по каталогу, а затем последовательно запрашивает детали по каждому найденному товару с паузой между запросами.

Python — поиск + детали
import time
import requests

BASE_URL = "https://bhapi.ru"
TOKEN = "ВАШ_API_TOKEN"

def search(query: str, page: int = 1, limit: int = 10):
    resp = requests.get(
        f"{BASE_URL}/wb/api/v1/search",
        params={"q": query, "page": page, "max_links": limit, "apiToken": TOKEN},
        timeout=30,
    )
    return resp.json()["data"]

def get_item(url: str):
    resp = requests.get(
        f"{BASE_URL}/wb/api/v1/item/by-url",
        params={"url": url},
        headers={"X-API-Token": TOKEN},
        timeout=30,
    )
    payload = resp.json()
    if payload["status"] == "ok" and payload["data"]["code"] == 200:
        return payload["data"]["data"]
    return None

data = search("аэрогриль объем 8 литров", page=1, limit=5)

items = []
for link in data["links"]:
    print("Парсим:", link)
    item = get_item(link)
    if item:
        items.append(item)
        print("  ✓", item["title"][:60])
    else:
        print("  ✗ не удалось получить данные")
    time.sleep(1.5)  # пауза, чтобы не превышать rate limit

print(f"Всего подробно получено товаров: {len(items)}")