Seed-Key API

Calculate ECU Seed β†’ Key programmatically. Shares the daily limit and validity window of the account's Seed-Key subscription.

  • Endpoints: /catalog, /calculate, /quota, /benchmark.
  • Bearer key auth, optional IP allow-list, 60 requests/min burst limit.
  • Same subscription also works in the online calculator at /seed β€” no key needed there, but calculations count toward the same daily limit. The counter resets at 00:00 UTC.

Choose a plan

Loading price…

After purchase, generate and manage your API key on the Account page.

Seed-Key API v1

Programmatic access to the Seed β†’ Key calculator. Access is granted per account and shares the daily limit and validity window of that account's Seed-Key subscription. The daily counter resets at 00:00 UTC.

1. Authentication

Every request carries your API key in a header β€” either form works:

Authorization: Bearer mbseed_0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c4b5a6978
X-API-Key: mbseed_0f1e2d3c4b5a69788796a5b4c3d2e1f00f1e2d3c4b5a6978
  • The key is shown once when it is created. Store it securely; it cannot be recovered.
  • One active key per account. Generating a new key immediately revokes the previous one.
  • A single key type β€” it can call every endpoint. Use /benchmark to test latency without spending quota.
  • A key may be locked to a list of allowed IP addresses. Requests from any other address get 403 ip_not_allowed.
  • HTTPS only. Send Content-Type: application/json on every request β€” including GET /catalog and GET /benchmark that carry no body; some requests are rejected without it.

2. Base URL & endpoints

https://mbcare.ru/api/v1/seed/{endpoint}
EndpointMethodPurposeMetered
/quotaGETCurrent access window and daily usageno
/catalogGET / POSTECU catalog + current catalog versionno
/calculatePOSTCalculate a key for a seedyes β€” 1 per success
/benchmarkGET / POSTRound-trip latency probe (returns an all-zero key)no

3. Response headers

HeaderMeaning
X-Request-IdUnique id for the request β€” quote it in support tickets.
X-Seed-Quota-LimitDaily calculation limit for the account.
X-Seed-Quota-RemainingCalculations left until 00:00 UTC.
X-Seed-Quota-ResetUnix timestamp of the next quota reset.
Retry-AfterOn 429 β€” seconds to wait before retrying.

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

Returns every supported ECU algorithm plus a version hash for the whole catalog. Pass your last known hash as knownVersion to get {"unchanged": true} with no items when nothing has changed.

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

# conditional:
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_…"
}
Item fieldMeaning
definitionIdOpaque 64-hex id. Stable, but can be absent for rows served from the file fallback β€” prefer matching on ECU facts.
ecuNameECU / control-unit name.
accessLevelAccess level (integer).
seedLength / keyLengthByte lengths of the seed and the resulting key.
softwareFirmware number for the IC204/IC213/… families; null otherwise.

To find your algorithm again after a catalog update, match locally on ecuName + accessLevel + software + seedLength + keyLength β€” and pass exactly those to /calculate.

6. POST /calculate

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

Two ways to identify the algorithm. By ECU facts is recommended β€” it does not depend on definitionId and keeps working across catalog updates.

6a. By ECU facts

FieldRequiredDescription
ecuNameyes1–64 printable ASCII, from /catalog (upper-cased server-side).
accessLevelyesInteger 0–1024.
seedLengthyes1–512; must equal the byte length of seed.
keyLengthyes1–512.
seedyesHex string (even length, ≀ 512 chars). Spaces, -, : are stripped.
softwareno1–32 digits. Omit to match the non-firmware rows.
catalogVersionnoThe catalog version you built against β€” 409 catalog_outdated on mismatch.

If several rows share the same facts the response returns the primary one with candidates > 1 β€” contact support if you hit an ambiguous ECU.

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. By definitionId

FieldRequiredDescription
definitionIdyes64-hex id from /catalog (not all-zero).
seedyesHex; byte length must equal the definition's seedLength.
catalogVersionnoAs above.
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"}'

Response

{
  "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_…"
}

The daily counter is incremented only on a successful calculation. key is upper-case hex.

7. GET /benchmark

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

Runs the real database read path on the calculation server and returns an all-zero key, so you can measure end-to-end latency without spending quota or needing an active subscription. Any key can call it.

FieldRequiredDescription
seednoAny valid hex; defaults to A5A5A5A5A5A5A5A5.
keyLengthno1–512; length of the returned zero key.
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. Errors

Every error has the shape:

{ "ok": false, "code": "invalid_seed", "error": "human-readable message", "requestId": "req_…" }
HTTPcodeMeaning
401missing_api_key / invalid_api_keyNo key, or malformed / unknown key.
403key_revoked / key_disabled / customer_disabledKey or account is not active.
403ip_not_allowedCaller IP is not in the key's allowed list.
403access_expired / no_accessSubscription ended / the account has no Seed-Key subscription.
403scope_missingThe key is not permitted for this endpoint.
429daily_limit_reachedDaily quota spent. Retry-After = seconds to 00:00 UTC.
429rate_limitedMore than 60 requests in a minute for this key.
429upstream_rate_limitedThe calculation service is briefly saturated (a limit shared by all API clients). Retry shortly.
400invalid_json / invalid_seed / invalid_definition / invalid_catalog_versionBad input.
400invalid_ecu_name / invalid_access_level / invalid_length / invalid_softwareBad ECU-facts field.
400seed_length_mismatchSeed byte length β‰  the algorithm's. Response includes expectedLength.
404definition_not_foundNo algorithm matches the given facts / definitionId.
405method_not_allowedWrong HTTP method for the endpoint.
409catalog_outdatedReload /catalog; the response includes currentVersion.
502upstream_unavailable / upstream_auth_failedCalculation service unreachable or gateway misconfigured.
503service_unavailable / resolve_unavailable / benchmark_unavailableTemporary server-side / catalog-database problem β€” retry with backoff.

9. Limits & good practice

  • Daily quota is shared with the website Seed-Key page β€” both draw from the same bucket, resetting at 00:00 UTC.
  • Burst limit: 60 requests per minute per key. Respect Retry-After.
  • The calculation service also has a short shared budget across all API clients; a burst can yield 429 upstream_rate_limited β€” retry with a small backoff.
  • Cache /catalog; refresh it only on 409 catalog_outdated or on a schedule (e.g. daily). Match algorithms on ecuName + accessLevel + software + seedLength + keyLength.
  • Retry 502 / 503 / upstream_rate_limited with exponential backoff; do not retry other 4xx except 409 (after reloading the catalog).
  • Log the X-Request-Id of failed calls for support.
  • schemaVersion in every success body only increments on a breaking change (a field removed, renamed, or retyped); new fields may appear without a bump, so read fields by name.

Need a key or a higher limit? Contact support.