API для партнёров lrk-parts.ru
Номенклатура запчастей для автовозов и коммерческого транспорта: поиск по артикулу, ваша цена, остатки и аналоги — для вашего сайта или учётной системы.
1Быстрый старт
- Получите токен доступа у менеджера lrk-parts.ru.
- Проверьте доступ — запрос вернёт название вашей компании и лимиты:
curl -H "Authorization: Bearer ВАШ_ТОКЕН" \ https://lrk-parts.ru/api/v1/limits - Найдите деталь по артикулу или названию:
curl -H "Authorization: Bearer ВАШ_ТОКЕН" \ "https://lrk-parts.ru/api/v1/parts/search?q=21214-3502010" - Для обновления всего ассортимента используйте полную выгрузку.
2Авторизация
Каждый запрос передаётся с заголовком:
Authorization: Bearer ВАШ_ТОКЕН
- Токен выдаёт и отзывает администратор lrk-parts.ru. Храните его как пароль — не публикуйте в коде страниц сайта.
- Нет токена или он неверный — ответ 401; доступ приостановлен — 403.
- Ответы — JSON в кодировке UTF-8.
3Методы
| Метод | Адрес | Что делает | Лимит |
|---|---|---|---|
| GET | /api/v1/parts/search?q=… | Поиск по артикулу или названию (до 50 позиций) | поиск |
| GET | /api/v1/parts/{артикул} | Цена, остаток и аналоги по точному артикулу | поиск |
| GET | /api/v1/export | Вся доступная номенклатура постранично | выгрузка |
| GET | /api/v1/limits | Ваша группа цен, доступный каталог, лимиты и расход за сегодня | не считается |
Параметры, примеры ответов и форма для пробных запросов — в справочнике методов.
4Данные позиции
| Поле | Тип | Описание |
|---|---|---|
sku | строка | Артикул |
name | строка | Наименование |
brand | строка | null | Бренд |
price | число | Цена для вас, руб. — по группе цен вашей компании |
retail_price | число | Розничная цена на сайте, руб. |
currency | строка | Всегда RUB |
quantity | число | строка | Остаток, шт. (см. остатки) |
quantity_exact | логическое | false — остаток не точный |
availability | строка | in_stock — в наличии, low_stock — мало, on_order — под заказ |
availability_label | строка | Статус по-русски, как на сайте |
url | строка | null | Страница товара на lrk-parts.ru |
analogs | массив | Аналоги (см. аналоги); нет поля, если передан analogs=0 |
Пример
{
"sku": "21214-3502010",
"name": "Барабан тормозной задний",
"brand": "ОАТ",
"price": 2205.0,
"retail_price": 2450.0,
"currency": "RUB",
"quantity": 14,
"quantity_exact": true,
"availability": "in_stock",
"availability_label": "В наличии",
"url": "https://lrk-parts.ru/catalog/oat/baraban-tormoznoy-zadniy-21214-3502010",
"analogs": []
}5Цены и остатки
Цена
price — цена для вашей компании по назначенной группе цен (опт, дилер…). Если для позиции
отдельная цена группы не задана — базовая цена. retail_price — розничная цена сайта для сравнения.
Цены в рублях с копейками.
Остаток
Режим показа остатков для вашей компании виден в /limits, поле quantity_mode:
| Реальный остаток | exact | masked |
|---|---|---|
| 0 (под заказ) | 0 | 0 |
| 5 | 5 | 5 |
| 8 | 8 | 8 |
| 14 | 14 | ">8" (строка) |
masked поле quantity может прийти строкой ">8" —
учитывайте это при разборе ответа. Также quantity = 1000 с quantity_exact: false означает
«много» — точное количество неизвестно.6Аналоги
У каждой позиции — массив analogs: заданные аналоги и кроссы. Тип связи relation_type:
analog — аналог, oem — номер производителя техники, original — оригинал.
in_catalog: true— аналог есть в доступном вам каталоге, у него заполнены цена и остаток (те же поля, что у позиции).in_catalog: false— известен только артикул и тип связи, остальные поляnull.- Аналоги не нужны — передайте
analogs=0: ответ станет меньше и быстрее (особенно для выгрузки).
7Доступный каталог
Вам может быть открыт не весь каталог, а отдельные категории. Позиции вне них не находятся поиском, по артикулу
возвращают 404, не попадают в выгрузку, а аналоги из них приходят с in_catalog: false.
Сколько позиций доступно — /limits → catalog.positions (столько же придёт в полной выгрузке);
catalog.categories: all — весь каталог, restricted — отдельные категории.
8Полная выгрузка
Для синхронизации всего ассортимента — /api/v1/export. Страницы листаются курсором: позиции не теряются
и не дублируются, даже если каталог меняется во время выгрузки.
- Первый запрос — без
after. - Следующие — с
after=meta.next_afterиз предыдущего ответа. meta.has_more = false— выгрузка закончена. Позиции, которых в ней нет, сняты с продажи или недоступны.
# Пример на bash + jq: выгрузка страницами по 2000 позиций без аналогов AFTER="" while : ; do RESP=$(curl -s -H "Authorization: Bearer ВАШ_ТОКЕН" \ "https://lrk-parts.ru/api/v1/export?per_page=2000&analogs=0${AFTER:+&after=$AFTER}") echo "$RESP" | jq -c '.data[]' >> catalog.jsonl [ "$(echo "$RESP" | jq -r '.meta.has_more')" = "true" ] || break AFTER=$(echo "$RESP" | jq -r '.meta.next_after') sleep 1 # не больше 60 запросов в минуту done
Рекомендуем обновлять каталог не чаще раза в час, а между выгрузками пользоваться
/parts/{артикул} для отдельных позиций.
9Лимиты запросов
| Лимит | Значение | Методы |
|---|---|---|
| В минуту | 60 | все вместе |
| В сутки: поиск | 5 000 | /parts/search, /parts/{артикул} |
| В сутки: выгрузка | 200 сейчас | /export |
- Лимит выгрузки — 24 полных проходов каталога в сутки страницами по 500 позиций (не меньше 200); растёт вместе с каталогом. Страницами по 2000 на проход нужно вчетверо меньше запросов.
- Суточные счётчики обнуляются в 00:00 (по московскому времени).
Ваши точные лимиты и расход —
/limits. - В каждом ответе — заголовки
X-Daily-Limit,X-Daily-Remaining,X-Daily-Reset(суточный лимит) иX-RateLimit-Limit,X-RateLimit-Remaining(минутный). - При превышении — 429: минутного — повторите через
Retry-Afterсекунд; суточного — кодdaily_limit_exceededи время сброса. - Индивидуальные лимиты для крупных партнёров — по запросу менеджеру.
10Ошибки
Формат ответа об ошибке:
{
"error": {
"code": "validation_failed",
"message": "Количество символов в поле q должно быть не меньше 2.",
"fields": { "q": ["Количество символов в поле q должно быть не меньше 2."] }
}
}| HTTP | Код | Когда |
|---|---|---|
| 401 | unauthenticated | Токен не передан или недействителен |
| 403 | partner_inactive | Доступ приостановлен |
| 404 | not_found | Нет такой позиции (или она вне доступного каталога) |
| 422 | validation_failed | Неверные параметры — подробности в fields |
| 429 | daily_limit_exceeded | Исчерпан суточный лимит |
| 429 | — | Превышен минутный лимит: {"message": "Too Many Attempts."} |
| 5xx | — | Временная ошибка сервера — повторите запрос позже |
11История версий
| Версия | Изменения |
|---|---|
| 1.3.0 | Доступ к каталогу по категориям; поле catalog в /limits. |
| 1.2.0 | Режим скрытых остатков (">8"), поле quantity_mode в /limits. |
| 1.1.0 | Остаток quantity, цена партнёра price и retail_price, аналоги, метод /limits, суточные лимиты. |
| 1.0.0 | Поиск, проверка по артикулу, выгрузка каталога. |
Изменения обратно совместимы: поля не удаляются и не меняют смысл, только добавляются новые.