API для подбора автозапчастей
Демонстрационная документация для интеграции поиска деталей, кросс-номеров и проверки совместимости с автомобилями.
Обзор API
Parcar API предоставляет программный доступ к каталогу автозапчастей с возможностью поиска по OEM-номерам, артикулам и наименованиям, получения аналогов и кросс-номеров, проверки совместимости деталей с конкретными автомобилями, а также расчета стоимости и сроков поставки.
API построен на REST-архитектуре, использует JSON для обмена данными и стандартные HTTP-методы. Все запросы должны выполняться через HTTPS. Данная документация содержит демонстрационные примеры для ознакомления со структурой запросов и ответов.
Все примеры запросов и ответов в данной документации предназначены исключительно для демонстрации структуры API. Они не обращаются к боевой базе данных и не возвращают реальные данные о наличии или ценах запчастей.
Аутентификация
API использует Bearer-токены для аутентификации запросов. Токен должен передаваться в заголовке
Authorization для каждого запроса.
Authorization: Bearer <demo_token>
Демонстрационный токен
Для тестирования структуры запросов используйте следующий демо-токен:
demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o
Production credentials are issued manually after partner onboarding. Demo examples below do not grant live access to real inventory data.
Base URL
Все запросы к демонстрационному API выполняются по следующему базовому URL:
https://api.parcar.ru/demo/v1
This base URL is provided for documentation preview and mock examples only. It does not return live data.
Эндпоинты
/parts/search
Поиск запчастей по OEM-номеру, артикулу или названию. Поддерживает фильтрацию по бренду и категории.
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
query |
string | Да | OEM-номер, артикул или название детали |
brand |
string | Нет | Фильтр по бренду производителя |
category |
string | Нет | Категория запчасти (engine, brake, suspension и т.д.) |
limit |
integer | Нет | Количество результатов на странице (по умолчанию 20, максимум 100) |
page |
integer | Нет | Номер страницы (по умолчанию 1) |
Пример запроса
curl -X GET "https://api.parcar.ru/demo/v1/parts/search?query=34116792219&limit=10" \ -H "Authorization: Bearer demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o" \ -H "Content-Type: application/json"
Пример ответа
{
"data": [
{
"partId": "prt_demo_7a8b9c0d1e2f",
"oemNumber": "34116792219",
"article": "BM-34116792219-DEMO",
"brand": "Brembo",
"name": "Тормозной диск передний",
"category": "brake_system",
"compatibility": ["BMW 3-Series F30", "BMW 4-Series F32"],
"stockStatus": "available",
"estimatedDeliveryDays": 2,
"price": 8450.00,
"currency": "RUB",
"score": 0.95,
"updatedAt": "2026-03-20T14:30:00Z"
},
{
"partId": "prt_demo_3g4h5i6j7k8l",
"oemNumber": "34116792219",
"article": "ATE-24.0122-DEMO",
"brand": "ATE",
"name": "Диск тормозной вентилируемый",
"category": "brake_system",
"compatibility": ["BMW 3-Series F30"],
"stockStatus": "limited",
"estimatedDeliveryDays": 5,
"price": 7200.00,
"currency": "RUB",
"score": 0.88,
"updatedAt": "2026-03-19T09:15:00Z"
}
],
"meta": {
"total": 2,
"page": 1,
"limit": 10,
"query": "34116792219"
}
}
Коды ответа
/parts/{partId}
Получение детальной информации о запчасти по её идентификатору.
Параметры пути
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
partId |
string | Да | Уникальный идентификатор запчасти |
Пример запроса
curl -X GET "https://api.parcar.ru/demo/v1/parts/prt_demo_7a8b9c0d1e2f" \ -H "Authorization: Bearer demo_pk_7f8a9b2c3d4e5f6g7h8i9j0k1l2m3n4o" \ -H "Content-Type: application/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"
}
Коды ответа
/parts/cross-reference
Поиск аналогов и кросс-номеров для указанной запчасти.
Тело запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
oemNumber |
string | Да* | OEM-номер оригинальной детали |
article |
string | Да* | Артикул производителя |
brand |
string | Нет | Бренд производителя оригинальной детали |
includeOEM |
boolean | Нет | Включить оригинальные детали в результат (по умолчанию true) |
* Требуется указать либо oemNumber, либо article
Пример запроса
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
}'
Пример ответа
{
"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"
}
Коды ответа
/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 -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"
}
}'
Пример ответа
{
"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"
}
Коды ответа
/brands
Получение списка брендов производителей запчастей с возможностью фильтрации по категории.
Параметры запроса
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
category |
string | Нет | Фильтр по категории запчастей |
country |
string | Нет | Фильтр по стране производства (ISO 3166-1 alpha-2) |
limit |
integer | Нет | Количество результатов (по умолчанию 50, максимум 200) |
Пример запроса
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"
Пример ответа
{
"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
}
}
Коды ответа
/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 -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"
}'
Пример ответа
{
"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": "Данная оценка является демонстрационной и не гарантирует наличие товара"
}
Коды ответа
Формат ошибок
API использует единый формат для возврата ошибок. Все ошибки возвращаются с соответствующим HTTP-статусом и 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 возвращает заголовки с информацией об оставшихся лимитах:
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 и не предоставляют доступа к реальным данным о наличии, ценах и совместимости запчастей.
Процесс получения доступа
- Заполните форму заявки на интеграцию
- Пройдите верификацию компании
- Подпишите договор и соглашение об уровне обслуживания (SLA)
- Получите production credentials и доступ к документации live API
Контакты
Для получения production-доступа свяжитесь с отделом интеграций:
Email: integration@parcar.ru
Отправьте заявку на интеграцию, и наш менеджер свяжется с вами в течение 2 рабочих дней для обсуждения условий и технических требований.
OpenAPI & SDK
Для упрощения интеграции предоставляются спецификация OpenAPI и примеры кода для популярных языков программирования. Обратите внимание, что все примеры ниже относятся к демонстрационному API.
OpenAPI Specification
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)
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
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)
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}')