Seed-Key API v1

Программный доступ к калькулятору Seed → Key. Доступ выдаётся на аккаунт и использует дневной лимит и срок действия подписки Seed-Key этого аккаунта. Дневной счётчик сбрасывается в 00:00 UTC.

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

Каждый запрос несёт API-ключ в заголовке — подходит любой вариант:

Authorization: Bearer mbseed_0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c4b5a6978
X-API-Key: mbseed_0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c4b5a6978
  • Ключ показывается один раз при создании. Храните его надёжно — восстановить нельзя.
  • Один активный ключ на аккаунт. Создание нового ключа сразу отзывает предыдущий.
  • Один тип ключа — он вызывает все эндпоинты. Используйте /benchmark для замера задержки без расхода квоты.
  • Ключ можно привязать к списку разрешённых IP-адресов. Запрос с другого адреса получит 403 ip_not_allowed.
  • Только HTTPS. Отправляйте Content-Type: application/json на каждом запросе — включая GET /catalog и GET /benchmark без тела; без него часть запросов отклоняется.

2. Базовый URL и эндпоинты

https://mbcare.ru/api/v1/seed/{endpoint}
ЭндпоинтМетодНазначениеСписывает квоту
/quotaGETТекущий срок доступа и расход за суткинет
/catalogGET / POSTКаталог ЭБУ + текущая версия каталоганет
/calculatePOSTРасчёт ключа по seedда — 1 за успех
/benchmarkGET / POSTЗамер задержки (возвращает нулевой ключ)нет

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

HeaderЗначение
X-Request-IdУникальный идентификатор запроса — указывайте его в обращениях в поддержку.
X-Seed-Quota-LimitДневной лимит расчётов для аккаунта.
X-Seed-Quota-RemainingОсталось расчётов до 00:00 UTC.
X-Seed-Quota-ResetUnix-время следующего сброса квоты.
Retry-AfterПри 429 — сколько секунд ждать до повтора.

4. GET /quota

GEThttps://mbcare.ru/api/v1/seed/quota

curl -s https://mbcare.ru/api/v1/seed/quota \
  -H "Authorization: Bearer $MBSEED_KEY" \
  -H "Content-Type: application/json"
{
  "ok": true,
  "allowed": true,
  "code": "ok",
  "quota": {
    "dailyLimit": 200,
    "used": 4,
    "remaining": 196,
    "accessUntil": "2026-12-31T20:00:00Z",
    "resetAt": "2026-09-05T00:00:00Z"
  },
  "requestId": "req_1a2b3c4d5e6f7a8b90"
}

5. GET /catalog

GEThttps://mbcare.ru/api/v1/seed/catalog

Возвращает все поддерживаемые алгоритмы ЭБУ и хэш version всего каталога. Передайте последний известный хэш в knownVersion — при отсутствии изменений придёт {"unchanged": true} без items.

curl -s https://mbcare.ru/api/v1/seed/catalog \
  -H "Authorization: Bearer $MBSEED_KEY" \
  -H "Content-Type: application/json"

# условный запрос:
curl -s -X POST https://mbcare.ru/api/v1/seed/catalog \
  -H "Authorization: Bearer $MBSEED_KEY" \
  -H "Content-Type: application/json" \
  -d '{"knownVersion":"<64-hex>"}'
{
  "ok": true,
  "schemaVersion": 1,
  "version": "9c1f...<64-hex>",
  "count": 4445,
  "unchanged": false,
  "items": [
    {
      "definitionId": "3f8a...<64-hex>",
      "ecuName": "IC_204",
      "accessLevel": 1,
      "seedLength": 8,
      "keyLength": 8,
      "software": "1979021500"
    }
  ],
  "requestId": "req_…"
}
Поле элементаЗначение
definitionIdНепрозрачный 64-hex идентификатор. Стабилен, но может отсутствовать для строк из файлового резерва — надёжнее сопоставлять по параметрам ЭБУ.
ecuNameИмя ЭБУ / блока управления.
accessLevelУровень доступа (целое число).
seedLength / keyLengthДлины seed и результирующего ключа в байтах.
softwareНомер прошивки для семейств IC204/IC213/…; иначе null.

Чтобы снова найти алгоритм после обновления каталога, сопоставляйте локально по ecuName + accessLevel + software + seedLength + keyLength — и передавайте именно их в /calculate.

6. POST /calculate

POSThttps://mbcare.ru/api/v1/seed/calculate

Два способа указать алгоритм. Рекомендуется по параметрам ЭБУ — он не зависит от definitionId и продолжает работать после обновлений каталога.

6a. По параметрам ЭБУ

ПолеОбязательноОписание
ecuNameда1–64 печатных ASCII-символа, из /catalog (на сервере приводится к верхнему регистру).
accessLevelдаЦелое число 0–1024.
seedLengthда1–512; должно совпадать с длиной seed в байтах.
keyLengthда1–512.
seedдаHex-строка (чётной длины, ≤ 512 символов). Пробелы, -, : удаляются.
softwareнет1–32 цифры. Опустите, чтобы сопоставить строки без привязки к прошивке.
catalogVersionнетВерсия каталога version, под которую собран запрос — при несовпадении 409 catalog_outdated.

Если под параметры подходит несколько строк, возвращается основная с candidates > 1 — при неоднозначном ЭБУ обратитесь в поддержку.

curl -s -X POST https://mbcare.ru/api/v1/seed/calculate \
  -H "Authorization: Bearer $MBSEED_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ecuName":"IC_204","accessLevel":1,"seedLength":8,"keyLength":8,
       "software":"1979021500","seed":"A1B2C3D4A1B2C3D4"}'

6b. По definitionId

ПолеОбязательноОписание
definitionIdда64-hex идентификатор из /catalog (не из одних нулей).
seedдаHex; длина в байтах должна совпадать с seedLength определения.
catalogVersionнетКак выше.
curl -s -X POST https://mbcare.ru/api/v1/seed/calculate \
  -H "Authorization: Bearer $MBSEED_KEY" \
  -H "Content-Type: application/json" \
  -d '{"definitionId":"3f8a...<64-hex>","seed":"A1B2C3D4A1B2C3D4"}'

Ответ

{
  "ok": true,
  "schemaVersion": 1,
  "catalogVersion": "9c1f...<64-hex>",
  "definitionId": "3f8a...<64-hex>",
  "ecuName": "IC_204",
  "accessLevel": 1,
  "seedLength": 8,
  "keyLength": 8,
  "software": "1979021500",
  "matchedBy": "definitionId",       // "definitionId" | "groupPrimary" | "benchmark"
  "candidates": 1,
  "key": "1122334455667788",
  "quota": { "dailyLimit": 200, "used": 5, "remaining": 195,
             "accessUntil": "2026-12-31T20:00:00Z", "resetAt": "2026-09-05T00:00:00Z" },
  "requestId": "req_…"
}

Дневной счётчик увеличивается только при успешном расчёте. key — hex в верхнем регистре.

7. GET /benchmark

GEThttps://mbcare.ru/api/v1/seed/benchmark

Выполняет реальный путь чтения из базы на расчётном сервере и возвращает нулевой ключ — можно измерить сквозную задержку без расхода квоты и без активной подписки. Доступно любому ключу.

ПолеОбязательноОписание
seedнетЛюбой корректный hex; по умолчанию A5A5A5A5A5A5A5A5.
keyLengthнет1–512; длина возвращаемого нулевого ключа.
curl -s https://mbcare.ru/api/v1/seed/benchmark \
  -H "Authorization: Bearer $MBSEED_KEY" \
  -H "Content-Type: application/json"
{
  "ok": true,
  "matchedBy": "benchmark",
  "upstreamMs": 41.7,
  "catalogVersion": "9c1f...<64-hex>",
  "keyLength": 8,
  "key": "0000000000000000",
  "probe": { "ecuName": "IC_204", "accessLevel": 1, "seedLength": 8, "software": "1979021500" },
  "requestId": "req_…"
}

8. Ошибки

Каждая ошибка имеет вид:

{ "ok": false, "code": "invalid_seed", "error": "сообщение для человека", "requestId": "req_…" }
HTTPcodeЗначение
401missing_api_key / invalid_api_keyНет ключа, либо ключ повреждён / неизвестен.
403key_revoked / key_disabled / customer_disabledКлюч или аккаунт неактивен.
403ip_not_allowedIP вызывающего не в списке разрешённых для ключа.
403access_expired / no_accessПодписка закончилась / у аккаунта нет подписки Seed-Key.
403scope_missingКлючу не разрешён этот эндпоинт.
429daily_limit_reachedДневная квота исчерпана. Retry-After = секунды до 00:00 UTC.
429rate_limitedБольше 60 запросов в минуту для этого ключа.
429upstream_rate_limitedРасчётный сервис кратковременно перегружен (лимит общий для всех клиентов API). Повторите чуть позже.
400invalid_json / invalid_seed / invalid_definition / invalid_catalog_versionНекорректные данные.
400invalid_ecu_name / invalid_access_level / invalid_length / invalid_softwareНекорректное поле параметров ЭБУ.
400seed_length_mismatchДлина seed в байтах ≠ ожидаемой алгоритмом. В ответе есть expectedLength.
404definition_not_foundНи один алгоритм не подходит под параметры / definitionId.
405method_not_allowedНеверный HTTP-метод для эндпоинта.
409catalog_outdatedПерезагрузите /catalog; в ответе есть currentVersion.
502upstream_unavailable / upstream_auth_failedРасчётный сервис недоступен или неверно настроен шлюз.
503service_unavailable / resolve_unavailable / benchmark_unavailableВременная проблема на сервере / в базе каталога — повторите с задержкой.

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

  • Дневная квота общая со страницей Seed-Key на сайте — обе берут из одного счётчика, сброс в 00:00 UTC.
  • Пиковый лимит: 60 запросов в минуту на ключ. Соблюдайте Retry-After.
  • У расчётного сервиса также есть небольшой общий бюджет на всех клиентов API; всплеск может дать 429 upstream_rate_limited — повторите с небольшой задержкой.
  • Кэшируйте /catalog; обновляйте только при 409 catalog_outdated или по расписанию (например, раз в сутки). Сопоставляйте алгоритмы по ecuName + accessLevel + software + seedLength + keyLength.
  • Повторяйте 502 / 503 / upstream_rate_limited с экспоненциальной задержкой; другие 4xx не повторяйте, кроме 409 (после перезагрузки каталога).
  • Сохраняйте X-Request-Id неудачных вызовов для поддержки.
  • schemaVersion в каждом успешном ответе растёт только при ломающем изменении (поле удалено, переименовано или сменило тип); новые поля могут появляться без роста версии, поэтому читайте поля по имени.

Нужен ключ или больший лимит? Напишите в поддержку.