Demo Environment
Demo Environment / Mock Reference

API для подбора автозапчастей

Демонстрационная документация для интеграции поиска деталей, кросс-номеров и проверки совместимости с автомобилями.

Обзор API

Parcar API предоставляет программный доступ к каталогу автозапчастей с возможностью поиска по OEM-номерам, артикулам и наименованиям, получения аналогов и кросс-номеров, проверки совместимости деталей с конкретными автомобилями, а также расчета стоимости и сроков поставки.

API построен на REST-архитектуре, использует JSON для обмена данными и стандартные HTTP-методы. Все запросы должны выполняться через HTTPS. Данная документация содержит демонстрационные примеры для ознакомления со структурой запросов и ответов.

Демонстрационный режим

Все примеры запросов и ответов в данной документации предназначены исключительно для демонстрации структуры API. Они не обращаются к боевой базе данных и не возвращают реальные данные о наличии или ценах запчастей.

Аутентификация

API использует Bearer-токены для аутентификации запросов. Токен должен передаваться в заголовке Authorization для каждого запроса.

http
Authorization: Bearer <demo_token>

Демонстрационный токен

Для тестирования структуры запросов используйте следующий демо-токен:

text
demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o
Production credentials

Production credentials are issued manually after partner onboarding. Demo examples below do not grant live access to real inventory data.

Base URL

Все запросы к демонстрационному API выполняются по следующему базовому URL:

text
https://api.parcar.ru/demo/v1
Documentation preview only

This base URL is provided for documentation preview and mock examples only. It does not return live data.

Эндпоинты

GET /parts/{partId}

Получение детальной информации о запчасти по её идентификатору.

Параметры пути

Параметр Тип Обязательный Описание
partId string Да Уникальный идентификатор запчасти

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

curl
curl -X GET "https://api.parcar.ru/demo/v1/parts/prt_demo_7a8b9c0d1e2f" \
  -H "Authorization: Bearer demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o" \
  -H "Content-Type: application/json"

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

json
{
  "partId": "prt_demo_7a8b9c0d1e2f",
  "oemNumber": "34116792219",
  "article": "BM-34116792219-DEMO",
  "brand": "Brembo",
  "name": "Тормозной диск передний",
  "description": "Вентилируемый тормозной диск для передней оси. Диаметр 330мм, толщина 24мм.",
  "category": "brake_system",
  "subcategory": "brake_discs",
  "specifications": {
    "diameter": "330mm",
    "thickness": "24mm",
    "mounting": "5x120",
    "ventilated": true
  },
  "compatibility": [
    {
      "make": "BMW",
      "model": "3-Series",
      "generation": "F30",
      "years": "2011-2019",
      "engines": ["320i", "328i", "330d"]
    }
  ],
  "images": [
    "https://cdn.parcar.ru/demo/images/brake_disc_01.jpg"
  ],
  "stockStatus": "available",
  "warehouses": [
    {
      "warehouseId": "wh_demo_moscow_01",
      "location": "Москва",
      "quantity": 12,
      "estimatedDeliveryDays": 2
    }
  ],
  "price": 8450.00,
  "currency": "RUB",
  "warrantyMonths": 12,
  "countryOfOrigin": "IT",
  "updatedAt": "2026-03-20T14:30:00Z"
}

Коды ответа

200 OK 401 Unauthorized 404 Not Found 429 Too Many Requests
POST /parts/cross-reference

Поиск аналогов и кросс-номеров для указанной запчасти.

Тело запроса

Параметр Тип Обязательный Описание
oemNumber string Да* OEM-номер оригинальной детали
article string Да* Артикул производителя
brand string Нет Бренд производителя оригинальной детали
includeOEM boolean Нет Включить оригинальные детали в результат (по умолчанию true)

* Требуется указать либо oemNumber, либо article

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

curl
curl -X POST "https://api.parcar.ru/demo/v1/parts/cross-reference" \
  -H "Authorization: Bearer demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o" \
  -H "Content-Type: application/json" \
  -d '{
    "oemNumber": "34116792219",
    "brand": "BMW",
    "includeOEM": true
  }'

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

json
{
  "query": {
    "oemNumber": "34116792219",
    "brand": "BMW"
  },
  "alternatives": [
    {
      "partId": "prt_demo_7a8b9c0d1e2f",
      "type": "aftermarket",
      "oemNumber": "34116792219",
      "article": "BM-34116792219-DEMO",
      "brand": "Brembo",
      "name": "Тормозной диск передний",
      "matchQuality": "exact",
      "score": 1.0,
      "price": 8450.00,
      "currency": "RUB",
      "stockStatus": "available"
    },
    {
      "partId": "prt_demo_3g4h5i6j7k8l",
      "type": "aftermarket",
      "oemNumber": "34116792219",
      "article": "ATE-24.0122-DEMO",
      "brand": "ATE",
      "name": "Диск тормозной вентилируемый",
      "matchQuality": "exact",
      "score": 1.0,
      "price": 7200.00,
      "currency": "RUB",
      "stockStatus": "limited"
    },
    {
      "partId": "prt_demo_9m0n1o2p3q4r",
      "type": "oem",
      "oemNumber": "34116792219",
      "article": "34116792219",
      "brand": "BMW",
      "name": "Тормозной диск передний оригинальный",
      "matchQuality": "original",
      "score": 1.0,
      "price": 15200.00,
      "currency": "RUB",
      "stockStatus": "available"
    }
  ],
  "totalCount": 3,
  "generatedAt": "2026-03-26T10:30:00Z"
}

Коды ответа

200 OK 400 Bad Request 401 Unauthorized 404 Not Found 429 Too Many Requests
POST /vehicles/compatibility/check

Проверка совместимости запчасти с указанным автомобилем.

Тело запроса

Параметр Тип Обязательный Описание
partId string Да Идентификатор запчасти
vehicle object Да Данные об автомобиле
vehicle.vin string Нет* VIN-код автомобиля
vehicle.make string Нет* Марка автомобиля
vehicle.model string Нет* Модель автомобиля
vehicle.year integer Нет* Год выпуска
vehicle.engine string Нет Двигатель (код или объем)

* Требуется либо vin, либо комбинация make + model + year

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

curl
curl -X POST "https://api.parcar.ru/demo/v1/vehicles/compatibility/check" \
  -H "Authorization: Bearer demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o" \
  -H "Content-Type: application/json" \
  -d '{
    "partId": "prt_demo_7a8b9c0d1e2f",
    "vehicle": {
      "make": "BMW",
      "model": "3-Series",
      "year": 2015,
      "engine": "320i"
    }
  }'

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

json
{
  "partId": "prt_demo_7a8b9c0d1e2f",
  "vehicle": {
    "make": "BMW",
    "model": "3-Series",
    "year": 2015,
    "engine": "320i"
  },
  "compatible": true,
  "confidence": "high",
  "matchDetails": {
    "position": "front",
    "side": "both",
    "notes": "Подходит для всех модификаций 320i F30 2012-2019"
  },
  "restrictions": [],
  "recommendations": [
    "Рекомендуется замена парами",
    "Использовать с оригинальными колодками для оптимальной эффективности"
  ],
  "checkedAt": "2026-03-26T10:30:00Z"
}

Коды ответа

200 OK 400 Bad Request 401 Unauthorized 404 Not Found 429 Too Many Requests
GET /brands

Получение списка брендов производителей запчастей с возможностью фильтрации по категории.

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

Параметр Тип Обязательный Описание
category string Нет Фильтр по категории запчастей
country string Нет Фильтр по стране производства (ISO 3166-1 alpha-2)
limit integer Нет Количество результатов (по умолчанию 50, максимум 200)

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

curl
curl -X GET "https://api.parcar.ru/demo/v1/brands?category=brake_system&limit=20" \
  -H "Authorization: Bearer demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o" \
  -H "Content-Type: application/json"

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

json
{
  "data": [
    {
      "brandId": "brd_demo_brembo_01",
      "name": "Brembo",
      "country": "IT",
      "categories": ["brake_system", "suspension"],
      "website": "https://www.brembo.com",
      "warrantyMonths": 24,
      "popularityScore": 0.95
    },
    {
      "brandId": "brd_demo_ate_01",
      "name": "ATE",
      "country": "DE",
      "categories": ["brake_system"],
      "website": "https://www.ate-brakes.com",
      "warrantyMonths": 24,
      "popularityScore": 0.88
    },
    {
      "brandId": "brd_demo_bosch_01",
      "name": "Bosch",
      "country": "DE",
      "categories": ["brake_system", "electrical", "filters", "spark_plugs"],
      "website": "https://www.bosch-automotive.com",
      "warrantyMonths": 12,
      "popularityScore": 0.92
    }
  ],
  "meta": {
    "total": 3,
    "category": "brake_system",
    "limit": 20
  }
}

Коды ответа

200 OK 401 Unauthorized 429 Too Many Requests
POST /pricing/estimate

Демонстрационный расчет стоимости и сроков поставки запчастей.

Тело запроса

Параметр Тип Обязательный Описание
items array Да Список запчастей для расчета
items[].partId string Да Идентификатор запчасти
items[].quantity integer Да Количество
destination object Да Адрес доставки
destination.city string Да Город доставки
destination.zipCode string Нет Почтовый индекс
deliveryType string Нет Тип доставки: standard, express, pickup (по умолчанию standard)

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

curl
curl -X POST "https://api.parcar.ru/demo/v1/pricing/estimate" \
  -H "Authorization: Bearer demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o" \
  -H "Content-Type: application/json" \
  -d '{
    "items": [
      {
        "partId": "prt_demo_7a8b9c0d1e2f",
        "quantity": 2
      },
      {
        "partId": "prt_demo_3g4h5i6j7k8l",
        "quantity": 1
      }
    ],
    "destination": {
      "city": "Москва",
      "zipCode": "125009"
    },
    "deliveryType": "standard"
  }'

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

json
{
  "estimateId": "est_demo_5s6t7u8v9w0x",
  "items": [
    {
      "partId": "prt_demo_7a8b9c0d1e2f",
      "name": "Тормозной диск передний",
      "brand": "Brembo",
      "quantity": 2,
      "unitPrice": 8450.00,
      "lineTotal": 16900.00,
      "currency": "RUB",
      "availability": "in_stock",
      "estimatedDeliveryDays": 2
    },
    {
      "partId": "prt_demo_3g4h5i6j7k8l",
      "name": "Диск тормозной вентилируемый",
      "brand": "ATE",
      "quantity": 1,
      "unitPrice": 7200.00,
      "lineTotal": 7200.00,
      "currency": "RUB",
      "availability": "limited_stock",
      "estimatedDeliveryDays": 5
    }
  ],
  "summary": {
    "subtotal": 24100.00,
    "deliveryCost": 850.00,
    "total": 24950.00,
    "currency": "RUB"
  },
  "delivery": {
    "type": "standard",
    "estimatedDays": 5,
    "estimatedDate": "2026-03-31",
    "carrier": "СДЭК"
  },
  "validUntil": "2026-03-26T12:30:00Z",
  "note": "Данная оценка является демонстрационной и не гарантирует наличие товара"
}

Коды ответа

200 OK 400 Bad Request 401 Unauthorized 404 Not Found 429 Too Many Requests

Формат ошибок

API использует единый формат для возврата ошибок. Все ошибки возвращаются с соответствующим HTTP-статусом и JSON-объектом, содержащим детали ошибки.

json
{
  "error": {
    "code": "invalid_request",
    "message": "The provided OEM number format is not supported in demo mode.",
    "requestId": "req_demo_01HXYZ8ABCDEF123456789",
    "details": {
      "field": "oemNumber",
      "value": "INVALID123"
    },
    "documentationUrl": "https://api.parcar.ru/docs/errors/invalid_request"
  }
}

Поля ошибки

Поле Тип Описание
error.code string Код ошибки для программной обработки
error.message string Человекочитаемое описание ошибки
error.requestId string Уникальный идентификатор запроса для обращения в поддержку
error.details object Дополнительные детали ошибки (опционально)
error.documentationUrl string Ссылка на документацию по ошибке (опционально)

Коды ошибок

Код HTTP Status Описание
invalid_request 400 Некорректный формат запроса или отсутствуют обязательные параметры
unauthorized 401 Отсутствует или невалидный токен авторизации
not_found 404 Запрашиваемый ресурс не найден
rate_limit_exceeded 429 Превышен лимит запросов
internal_error 500 Внутренняя ошибка сервера

Лимиты запросов

Демонстрационный API имеет ограничения на количество запросов для обеспечения стабильности и предотвращения злоупотреблений.

Демонстрационные лимиты

Указанные ниже лимиты применяются только к демонстрационному режиму. Production-окружение имеет индивидуальные лимиты, согласованные с партнером.

Ограничения

Лимит Значение Описание
Запросы в минуту 60 Максимальное количество запросов с одного IP-адреса
Одновременные запросы 5 Максимальное количество параллельных соединений
Бurst-лимит 10 Максимальное количество запросов в секунду

Заголовки ответа

При каждом запросе API возвращает заголовки с информацией об оставшихся лимитах:

http
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1711452000
Retry-After: 45

Обработка превышения лимита

При превышении лимита запросов API возвращает статус 429 Too Many Requests. Заголовок Retry-After содержит количество секунд до сброса лимита.

Production Access

Доступ к production-окружению API предоставляется только после прохождения верификации партнера. Демонстрационные примеры, представленные на этой странице, не являются публичным live API и не предоставляют доступа к реальным данным о наличии, ценах и совместимости запчастей.

Процесс получения доступа

  1. Заполните форму заявки на интеграцию
  2. Пройдите верификацию компании
  3. Подпишите договор и соглашение об уровне обслуживания (SLA)
  4. Получите production credentials и доступ к документации live API

Контакты

Для получения production-доступа свяжитесь с отделом интеграций:
Email: integration@parcar.ru

Готовы начать?

Отправьте заявку на интеграцию, и наш менеджер свяжется с вами в течение 2 рабочих дней для обсуждения условий и технических требований.

OpenAPI & SDK

Для упрощения интеграции предоставляются спецификация OpenAPI и примеры кода для популярных языков программирования. Обратите внимание, что все примеры ниже относятся к демонстрационному API.

OpenAPI Specification

yaml
openapi: 3.0.3
info:
  title: Parcar API (Demo)
  version: 1.0.0
  description: Demo API for auto parts search and compatibility
servers:
  - url: https://api.parcar.ru/demo/v1
    description: Demo server

# Полная спецификация доступна по запросу

Postman Collection

Postman Collection (Demo) — преднастроенная коллекция со всеми эндпоинтами и примерами запросов.

Примеры кода

JavaScript (Fetch)

javascript
const searchParts = async (query) => {
  const response = await fetch(
    `https://api.parcar.ru/demo/v1/parts/search?query=${encodeURIComponent(query)}&limit=10`,
    {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o',
        'Content-Type': 'application/json'
      }
    }
  );
  
  if (!response.ok) {
    throw new Error(`HTTP error! status: ${response.status}`);
  }
  
  return await response.json();
};

// Usage
searchParts('34116792219')
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

PHP (cURL)

php
<?php

function searchParts($query) {
    $apiUrl = 'https://api.parcar.ru/demo/v1/parts/search';
    $token = 'demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o';
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $apiUrl . '?query=' . urlencode($query) . '&limit=10');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Authorization: Bearer ' . $token,
        'Content-Type: application/json'
    ]);
    
    $response = curl_exec($ch);
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    if ($httpCode !== 200) {
        throw new Exception("HTTP Error: " . $httpCode);
    }
    
    return json_decode($response, true);
}

try {
    $result = searchParts('34116792219');
    print_r($result);
} catch (Exception $e) {
    echo 'Error: ' . $e->getMessage();
}

Python (Requests)

python
import requests
from typing import Dict, Any

DEMO_TOKEN = 'demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o'
BASE_URL = 'https://api.parcar.ru/demo/v1'

def search_parts(query: str, limit: int = 10) -> Dict[str, Any]:
    """
    Search for parts by OEM number, article or name.
    """
    headers = {
        'Authorization': f'Bearer {DEMO_TOKEN}',
        'Content-Type': 'application/json'
    }
    
    params = {
        'query': query,
        'limit': limit
    }
    
    response = requests.get(
        f'{BASE_URL}/parts/search',
        headers=headers,
        params=params
    )
    
    response.raise_for_status()
    return response.json()

# Usage
if __name__ == '__main__':
    try:
        result = search_parts('34116792219')
        print(f"Found {result['meta']['total']} parts")
        for part in result['data']:
            print(f"- {part['name']} ({part['brand']}): {part['price']} {part['currency']}")
    except requests.exceptions.RequestException as e:
        print(f'Error: {e}')