PartX API для пользователей и разработчиков

API PartX: импорт прайса, обновления и справочники

API предназначен для автоматизации: синхронизация цен/остатков из 1С/ERP, регулярные обновления, отчёты по импорту, справочники брендов и городов.

Примечание: спецификация ниже — «боевой» шаблон. Если какие-то эндпоинты/поля у вас называются иначе, просто переименуйте в реализации.

Для пользователей (без разработки)

Если вы поставщик и хотите автоматически обновлять цены/остатки из 1С/ERP — API решает это без ручной загрузки файлов.

Сценарий
Обновления по расписанию
Раз в час/день отправляете изменения — покупатели видят актуальные данные.
Сценарий
Большие каталоги
API лучше для 100k+ строк: инкремент, отчёты, контроль качества.
Сценарий
Несколько складов
Передаёте склад/город в каждой позиции — фильтры и сроки работают точно.
Как подключиться
  1. Зарегистрируйте компанию и заполните профиль (ИНН, контакты, города).
  2. Включите «API-доступ» в кабинете (или запросите у поддержки).
  3. Получите API-ключ и передайте разработчику/интегратору.
  4. Настройте импорт: полный или инкрементальный режим.

Доступ и авторизация

Базовый вариант: API-ключ в заголовке. Альтернатива: Bearer токен. Ниже — рекомендуемый стандарт.
API Key (рекомендовано)
X-Api-Key: YOUR_KEY
X-Company-Id: 123 (если ключ мульти-компанийный — опционально)
Bearer (альтернатива)
Authorization: Bearer YOUR_TOKEN
Для токенов чаще нужна выдача/ротация/истечение срока.
Проверка доступа
Эндпоинт
GET https://www.partx.online/api/v1/me
Возвращает компанию, права и лимиты.
curl -s "https://www.partx.online/api/v1/me" \
  -H "X-Api-Key: YOUR_KEY"

Конвенции API

Формат ответов
Все ответы — JSON. Ошибки — единый формат { "error": { ... } }.
Idempotency
Для импорта используйте Idempotency-Key, чтобы повторный запрос не создавал дубль.
Пагинация
?limit=50&cursor=... (cursor-based). В ответе: next_cursor.
Версионирование
В URL: /api/v1. Несовместимые изменения — только в v2.

Эндпоинты (основные)

Метод URL Назначение
GET https://www.partx.online/api/v1/me Профиль компании и права
GET https://www.partx.online/api/v1/dict/brands Справочник брендов (поиск/автокомплит)
GET https://www.partx.online/api/v1/dict/cities Справочник городов/складов
POST https://www.partx.online/api/v1/supplier/pricelists Создать прайс-лист (контейнер)
POST https://www.partx.online/api/v1/supplier/pricelists/{id}/import Импорт файла (XLSX/CSV) или URL
POST https://www.partx.online/api/v1/supplier/pricelists/{id}/sync Инкрементальная синхронизация (upsert/delete)
GET https://www.partx.online/api/v1/supplier/imports/{import_id} Статус импорта + отчёт по ошибкам
Совет по интеграции
Для больших каталогов используйте sync (инкремент), чтобы не гонять весь прайс при каждом изменении.

Импорт прайса: 2 режима

Режим A: полный импорт (XLSX/CSV)
Когда проще “перезаливать” весь прайс: 1–50k строк или редкие обновления.
Multipart загрузка
curl -X POST "https://www.partx.online/api/v1/supplier/pricelists/123/import" \
  -H "X-Api-Key: YOUR_KEY" \
  -H "Idempotency-Key: 2b6f8f0e-..." \
  -F "file=@prices.xlsx" \
  -F "mode=full" \
  -F "delimiter=;"
Режим B: инкремент (upsert/delete)
Для больших каталогов и частых обновлений: отправляете только изменения.
JSON sync
curl -X POST "https://www.partx.online/api/v1/supplier/pricelists/123/sync" \
  -H "X-Api-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "incremental",
    "upsert": [
      {
        "sku": "06A109479",
        "brand": "VAG",
        "price": 1790,
        "stock": 12,
        "delivery_days": "1-2",
        "city": "Москва"
      }
    ],
    "delete": [
      { "sku": "90915-YZZE1", "brand": "TOYOTA", "city": "Москва" }
    ]
  }'
Статус импорта
Импорт асинхронный: API возвращает import_id. Статус проверяйте по эндпоинту импорта.
GET https://www.partx.online/api/v1/supplier/imports/{import_id}
Headers: X-Api-Key: YOUR_KEY
{
  "import_id": "imp_20260108_001",
  "status": "finished",
  "stats": {
    "rows_total": 100000,
    "rows_ok": 99820,
    "rows_failed": 180
  },
  "errors": [
    { "row": 15, "field": "price", "code": "INVALID_NUMBER", "message": "Цена должна быть числом" }
  ]
}

Схемы данных (позиция прайса)

Рекомендуемый набор полей. Минимум: sku, brand, price.

Поле → тип
  • sku — string (артикул)
  • brand — string
  • price — number
  • currency — string (RUB/EUR/USD), опционально
  • stock — integer (остаток), опционально
  • delivery_days — string (2 или 3-5), опционально
  • city — string, опционально
  • warehouse — string, опционально
  • name — string, опционально
  • min_qty — integer, опционально
  • multiplicity — integer, опционально
Пример объекта
{
  "sku": "0 986 479 123",
  "brand": "BOSCH",
  "price": 1790,
  "currency": "RUB",
  "stock": 12,
  "delivery_days": "1-2",
  "city": "Москва",
  "warehouse": "Склад-1",
  "name": "Фильтр масляный",
  "min_qty": 1,
  "multiplicity": 1
}
Внутри PartX артикул может быть нормализован (пробелы/дефисы/регистр).

Ошибки и коды ответов

HTTP коды
  • 200/201 — успех
  • 400 — некорректные данные
  • 401 — нет авторизации
  • 403 — нет прав
  • 404 — не найдено
  • 409 — конфликт / дубль (Idempotency)
  • 429 — лимит запросов
  • 500 — ошибка сервера
Единый формат ошибки
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Некорректные данные",
    "details": [
      { "field": "price", "code": "INVALID_NUMBER", "message": "Цена должна быть числом" }
    ],
    "request_id": "req_abc123"
  }
}

Лимиты и рекомендации

Rate limit
например, 60 req/min
Укажите ваши реальные значения. При 429 используйте retry/backoff.
Размер файла
например, до 50–200 МБ
Для очень больших прайсов лучше CSV + инкремент.
Надёжность
Idempotency-Key
Всегда ставьте ключ на импорт/синк — это защита от дублей.

FAQ

Кому нужен API PartX? +
Поставщикам и интеграторам: чтобы автоматически обновлять цены/остатки и сроки поставки из 1С/ERP/WMS без ручной загрузки файлов.
Можно ли работать только через Excel/CSV без API? +
Да. Используйте шаблон XLSX и требования формата. API нужен, когда вы хотите обновлять данные по расписанию или очень часто.
Какой режим обновления лучше — полный или инкрементальный? +
Для небольших прайсов — полный импорт. Для больших каталогов и частых обновлений — инкрементальный режим (upsert/delete).
Как обрабатываются ошибки в позициях? +
Импорт создаёт отчёт: сколько строк принято, сколько отклонено и почему. Ошибки возвращаются в формате JSON с кодами и подсказками.

Нужна интеграция под 1С/ERP?

Дайте разработчику API-ключ и используйте инкрементальные обновления — это самый быстрый путь к актуальным ценам и остаткам.