--- title: Levam OEM API — Overview description: REST API for original (OEM) auto parts catalogs — VIN decoding, vehicle selection, part diagrams, applicability lookups. --- # Levam OEM API Levam OEM API is a REST API for original (OEM) auto parts catalogs. The API provides: - the list of OEM catalogs (brands) and vehicle models; - vehicle identification by VIN or by parameters (family, model, year, market, etc.); - unit groups, parts, and diagrams with part coordinates; - part applicability (which vehicles and units contain a given part number); - order validation (do part numbers fit a VIN) and maintenance parts. ## Base URL ``` https://api.levam.net ``` All methods are called with **GET** requests to paths of the form `/oem/v1/{Method}` and return JSON (UTF-8). ## Quick start ```bash curl "https://api.levam.net/oem/v1/CatalogsListGet?api_key=YOUR_KEY" ``` The API key is issued in your [dashboard](https://levam.net/cabinet) after registration. See [Authentication](/docs/en/authentication). ## Conventions - `api_key` — required in every method. - `lang` — optional response language (e.g. `en`, `de`, `ru`). If data is unavailable in the requested language, English is returned. Defaults to `en`. - `ssd` (Server Side Data) — vehicle-selection session identifier. Returned by vehicle selection methods; pass it to the next method in the chain. See [vehicle selection](/docs/en/vehicle-selection). - Every successful response contains an `error` field; an empty string means no error. See [Error codes](/docs/en/errors). ## Typical call chain 1. [`CatalogsListGet`](/docs/en/catalogs) — the list of catalogs (brands). 2. [`ModelsListGet2`](/docs/en/catalogs) — families and models of a catalog, **or** [`VinFind`](/docs/en/vin-search) — straight from a VIN. 3. [`VehicleParamsSet`](/docs/en/vehicle-selection) → [`VehicleModificationsGet`](/docs/en/vehicle-selection) — narrow down the modification. 4. [`PartGroupsGet`](/docs/en/parts) — unit group tree, then [`PartsGet`](/docs/en/parts) — parts and the unit diagram. 5. Also: [part applicability](/docs/en/applicability), [order check](/docs/en/order-check), [maintenance parts](/docs/en/maintenance). ## Documentation sections - [Authentication](/docs/en/authentication) - [Pricing and billing](/docs/en/billing) - [Catalogs and models](/docs/en/catalogs) - [Vehicle selection by parameters](/docs/en/vehicle-selection) - [VIN search](/docs/en/vin-search) - [Unit groups and parts](/docs/en/parts) - [Part applicability](/docs/en/applicability) - [Order check](/docs/en/order-check) - [Maintenance parts](/docs/en/maintenance) - [Error codes](/docs/en/errors) Every page is also available as raw Markdown — append `.md` to the URL (e.g. `/docs/en/authentication.md`). Full link list for LLM agents: [/llms.txt](/llms.txt), all content in one file: [/llms-full.txt](/llms-full.txt). --- --- title: Authentication description: Levam OEM API key — how to obtain and pass it, authorization error formats. --- # Authentication Every Levam OEM API method requires an API key. The key is passed as the **`api_key` query parameter** in each request: ```bash curl "https://api.levam.net/oem/v1/CatalogsListGet?api_key=YOUR_KEY" ``` Authorization headers (Authorization, X-Api-Key, etc.) are not used. ## Getting a key 1. Register at [levam.net](https://levam.net/register) (or [levam.ru](https://levam.ru/register)). 2. Your API key is shown in the [dashboard](https://levam.net/cabinet). 3. An active unit package is required for the API to work — see [Pricing and billing](/docs/en/billing). ## Authorization errors | HTTP status | Response body | Reason | |---|---|---| | 401 | `{"error": "invalid api key"}` | Key missing, not found, or blocked | | 403 | `{"error": "Client disabled. not enough money"}` | Access disabled: out of units or the package expired | Failed authorization requests are not billed. ## Recommendations - Do not expose `api_key` in client-side code (browser, mobile app) — call the API from your server. - You can restrict the list of IP addresses allowed to use your key in the dashboard. --- --- title: Pricing and billing description: Levam OEM API units — method costs, free methods, VIN and SSD charge deduplication. --- # Pricing and billing API usage is paid with **units**. Units are purchased as packages in the [dashboard](https://levam.net/cabinet); a package has a volume (number of units) and a validity period. ## Method costs | Method | Cost, units | |---|---| | `CatalogsListGet` | 0 (free) | | `ModelsListGet2` | 0 (free) | | `VehicleParamsSet` | 0 (free) | | `VehicleModificationsGet` | 0 (free) | | `PartGroupsGet` | 1 | | `PartsGet` | 1 | | `VinFind` | 1 | | `ApplicabilityCars` | 1 | | `ApplicabilityNodes` | 1 | | `MaintenanceParts` | 1 | | `OrderCheck` | 2 | | `OrderCheckResult` | 0 (free) | ## Charging rules - Units are deducted **only for successful responses** (HTTP 200). Authorization failures and internal errors are not billed. - **VIN deduplication**: repeated requests with the same VIN under the same `api_key` within 24 hours are not charged again. This applies to `VinFind` and to subsequent chain methods called with the same VIN. - **SSD deduplication**: `PartGroupsGet` and `PartsGet` charge 1 unit per selection session (`ssd`). While you work within one paid `ssd`, repeated calls of these methods are free. In practice this means: a full "VIN → groups → parts" chain costs 1 unit, and navigating the group tree and units within a single selection consumes no extra units. ## When you run out of units Once the unit balance is exhausted or the package expires, paid methods return HTTP 403 with `{"error": "Client disabled. not enough money"}`. Your current balance and usage statistics are available in the dashboard. --- --- title: Catalogs and models description: CatalogsListGet and ModelsListGet2 methods — the list of OEM catalogs, manufacturer families and models. --- # Catalogs and models ## CatalogsListGet The list of available OEM catalogs (brands). Free method. ``` GET https://api.levam.net/oem/v1/CatalogsListGet ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `type` | no | Vehicle type: empty — all, `0` — cars, `1` — commercial, `2` — motorbikes, `3` — trucks, `4` — special vehicles | ### Example ```bash curl "https://api.levam.net/oem/v1/CatalogsListGet?api_key=KEY&type=" ``` ```json { "catalogs": [ { "name": "Audi", "code": "3", "catalog_code": "3", "logo": "https://img.levam.net/images/logos/big/audi.png", "logo_small": "https://img.levam.net/images/logos/small/audi.png", "supportframesearch": "no", "frameexample": "", "supportvinsearch": "yes", "vinexample": "WAUBA24B3XN104537", "universal_classifier": "yes", "type_moto": "no", "type_auto": "yes", "type_transport": "no" } ], "error": "" } ``` ### Response fields | Field | Description | |---|---| | `catalogs[].name` | Catalog name | | `catalogs[].catalog_code` | Catalog code — used in other methods | | `catalogs[].code` | Deprecated duplicate of `catalog_code` (kept for compatibility) | | `catalogs[].logo`, `logo_small` | Catalog logos, 100×100 and 50×50 | | `catalogs[].supportvinsearch`, `vinexample` | VIN search support and a sample VIN for the catalog | | `catalogs[].supportframesearch`, `frameexample` | FRAME search support and a sample number | | `catalogs[].universal_classifier` | Whether the universal classifier is available (yes/no) | | `catalogs[].type_moto`, `type_auto`, `type_transport` | Availability of motorbikes / cars / trucks and commercial vehicles | | `error` | Error information; an empty string means no error | ## ModelsListGet2 All families and models of a single manufacturer. Free method. ``` GET https://api.levam.net/oem/v1/ModelsListGet2 ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `catalog_code` | yes | Catalog code from `CatalogsListGet` | | `lang` | no | Response language | | `type` | no | Vehicle type (see `CatalogsListGet`) | ### Example ```bash curl "https://api.levam.net/oem/v1/ModelsListGet2?api_key=KEY&catalog_code=3" ``` ```json { "error": "", "catalog": { "name": "Audi", "catalog_code": "3", "logo": "https://img.levam.net/images/logos/big/audi.png" }, "families": { "Audi 100": { "family_name": "Audi 100", "family_image": "https://img.levam.net/images/oem/models/Audi_100_Mk4_C4_sedan_1991.png", "models": [ { "model": "A10", "model_picture": "https://img.levam.net/images/oem/models/Audi_100_Mk4_C4_sedan_1991.png" }, { "model": "A10C", "model_picture": "https://img.levam.net/images/oem/models/Audi_100_Mk4_C4_sedan_1991.png" } ] } } } ``` ### Response fields | Field | Description | |---|---| | `catalog` | The selected catalog object (fields as in `CatalogsListGet`) | | `families` | "Family name → family" object: `family_name`, `family_image`, `models[]` | | `families.*.models[].model` | Model code — passed to `VehicleParamsSet` | | `families.*.models[].model_picture` | Model image | | `error` | Error information; an empty string means no error | Next: [vehicle selection by parameters](/docs/en/vehicle-selection). --- --- title: Vehicle selection by parameters description: VehicleParamsSet and VehicleModificationsGet methods — narrowing down the vehicle modification and the SSD mechanism. --- # Vehicle selection by parameters When the VIN is unknown, the modification is selected by parameters: pick a catalog and model, then refine parameters (production year, market, body…) until you get a list of modifications with `link` codes. ## The SSD mechanism `ssd` (Server Side Data) is a server-side selection session identifier. The first `VehicleParamsSet` call without `ssd` creates a new session and returns its identifier in `client.ssd`; all subsequent calls of the chain must pass this `ssd`. The session stores the selected catalog, model, and accumulated parameters. ## VehicleParamsSet Narrowing down the modification of the selected model. Free method. ``` GET https://api.levam.net/oem/v1/VehicleParamsSet ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `catalog_code` | yes | Catalog code | | `family` | yes | Family (from `ModelsListGet2`) | | `model` | yes | Model code (from `ModelsListGet2`) | | `ssd` | no | Session identifier (empty on the first call) | | `param` | no | Selected parameter as `code:value`; multiple — separated by `;` | | `lang` | no | Response language | ### Example ```bash curl "https://api.levam.net/oem/v1/VehicleParamsSet?api_key=KEY&catalog_code=3&model=AA3&ssd=&family=Audi+A3" ``` ```json { "client": { "mark": "Audi", "catalog_code": "3", "family": "Audi A3", "model": "AA3", "ssd": "e5bae1070f765fb2ca054f112b9a74d2", "param": "", "modification": "", "vin": "", "frame": "", "universal_classifier": "yes" }, "params": { "catalog": { "name": "The market", "values": { "BRAZIL": "BRAZIL" } }, "year_prod": { "name": "Release date", "values": { "2001": "2001", "2002": "2002" } } }, "error": "" } ``` ### Response fields | Field | Description | |---|---| | `client` | Session state: catalog, family, model, `ssd`, selected parameters, VIN/FRAME (if any) | | `client.ssd` | Session identifier — pass it to subsequent calls | | `params` | "Parameter code → { name, values }" object. `values` — allowed parameter values | | `model_image` | Model image (only when it exists) | | `error` | Error information; an empty string means no error | Call `VehicleParamsSet` repeatedly, adding `param=code:value`, until the choice is narrow enough, then proceed to `VehicleModificationsGet`. ## VehicleModificationsGet The list of modifications matching the selected parameters. Free method. ``` GET https://api.levam.net/oem/v1/VehicleModificationsGet ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `ssd` | yes | Session identifier from `VehicleParamsSet` | | `lang` | no | Response language | ### Example ```bash curl "https://api.levam.net/oem/v1/VehicleModificationsGet?api_key=KEY&ssd=770e1aee96bbf85678ab1426f66af8c6" ``` ```json { "client": { "mark": "Audi", "catalog_code": "3", "family": "Audi A3", "model": "AA3", "ssd": "e5bae1070f765fb2ca054f112b9a74d2" }, "modifications": [ { "Make": "Audi", "The market": "BRAZIL", "Release date": "2001", "link": "VElKZGppUnBJY3pHUVRTeFgwVkNpTFFNMVhMdW9v..." } ], "error": "" } ``` ### Response fields | Field | Description | |---|---| | `client` | Session state (as in `VehicleParamsSet`) | | `modifications[]` | Modifications: parameter names/values plus the `link` field — the modification code | | `modifications[].link` | Modification code — passed to `PartGroupsGet` / `PartsGet` | | `error` | Error information; an empty string means no error | Next: [unit groups and parts](/docs/en/parts). --- --- title: VIN search description: VinFind method — vehicle identification by VIN, the modification list, and the SSD for further selection. --- # VIN search ## VinFind Vehicle search by VIN. Cost — 1 unit; repeated requests with the same VIN within 24 hours are not billed (see [billing](/docs/en/billing)). ``` GET https://api.levam.net/oem/v1/VinFind ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `vin` | yes | VIN (17 characters; O, Q, I are automatically normalized to 0, 0, 1) | ### Example ```bash curl "https://api.levam.net/oem/v1/VinFind?api_key=KEY&vin=WAUBA24B3XN104537" ``` ```json { "error": "", "client": { "mark": "audi", "catalog_code": "3", "family": "Audi A6/S6/Avant qu.", "model": "A6Q", "ssd": "f9bab10208cc832ff01849397a902988", "vin": "WAUBA24B3XN104537", "frame": "" }, "models": [ { "Model": "Audi A6/S6/Avant qu.", "Transmission": "EKX", "Release date": "1999", "The market": "MEX", "link": "bGtnNjVTSHYwcEhENC9FcmVXYUhoWHRBd3FhZUlJS3oz..." } ] } ``` ### Response fields | Field | Description | |---|---| | `client` | Selection session state: catalog, family, model, `ssd`, VIN | | `client.ssd` | Session identifier — pass it to `PartGroupsGet` / `PartsGet` | | `models[]` | Matched modifications: parameters plus `link` — the modification code | | `error` | Error information; an empty string means no error | If the VIN resolves to a single modification, the `models` array contains one element — take its `link` and proceed to [unit groups](/docs/en/parts). ## FRAME search Search by FRAME number (for Japanese vehicles) is **not available as a separate method** in the current API version: the `FrameFind` endpoint has been retired. The `supportframesearch` and `frameexample` fields in `CatalogsListGet` are kept for compatibility. If you need FRAME search, contact support from your [dashboard](https://levam.net/cabinet). --- --- title: Unit groups and parts description: PartGroupsGet and PartsGet methods — the parts group tree, unit parts, diagrams and coordinates. --- # Unit groups and parts Once a modification is selected (you have `ssd` and `link`), request the unit group tree and then the parts of a specific unit. ## PartGroupsGet Parts groups of the selected modification. Cost — 1 unit per `ssd` session (repeated calls within a paid session are free). ``` GET https://api.levam.net/oem/v1/PartGroupsGet ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `ssd` | yes | Session identifier | | `link` | yes | Modification code (from `VehicleModificationsGet` / `VinFind`) | | `group` | no | Group code. Empty — root groups; a code — nested subgroups of that group | | `lang` | no | Response language | ### Example ```bash curl "https://api.levam.net/oem/v1/PartGroupsGet?api_key=KEY&ssd=770e1aee96bbf85678ab1426f66af8c6&link=dm5GNk8vOXNQN1pBWmZTUjU4WnhpMW4w..." ``` ```json { "groups": [ { "full_name": "engine", "group_name": "1", "image": ["https://img.levam.net/images/oem/audi/groups/1.png"] }, { "full_name": "body", "group_name": "8", "image": ["https://img.levam.net/images/oem/audi/groups/8.png"] } ], "next": 1, "link": "VElKZGppUnBJY3pHUVRTeFgwVkNpTFFNMVhMdW9v...", "model_info": { "Make": "Audi", "The market": "BRAZIL", "Release date": "2001" }, "error": "", "client": { "mark": "audi", "catalog_code": "3", "family": "Audi A3", "model": "AA3", "ssd": "cef178ee5e5cfb1b866bb3b3fda80537" } } ``` ### Response fields | Field | Description | |---|---| | `groups[].full_name` | Group name | | `groups[].group_name` | Group code — pass it as `group` in the next call | | `groups[].image` | Group images | | `next` | `1` — the groups have nested subgroups (keep descending with `PartGroupsGet`); `0` — no nested groups, you can request `PartsGet` | | `model_info` | Parameters of the selected modification | | `client` | Session state | | `error` | Error information; an empty string means no error | ## PartsGet Unit parts: the parts list, the diagram, and part coordinates on it. Cost — 1 unit per `ssd` session (same as `PartGroupsGet`). ``` GET https://api.levam.net/oem/v1/PartsGet ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `ssd` | yes | Session identifier | | `link` | yes | Modification code | | `group` | yes | Unit code (a group with `next=0` from `PartGroupsGet`) | | `lang` | no | Response language | ### Example ```bash curl "https://api.levam.net/oem/v1/PartsGet?api_key=KEY&ssd=770e1aee96bbf85678ab1426f66af8c6&link=dm5GNk8vOXNQN1pB...&group=010-10000" ``` ```json { "client": { "mark": "audi", "catalog_code": "3", "family": "Audi A3", "model": "AA3" }, "parts": { "parts": [ { "standart": { "part_number": "3", "part_code": "1H0 819 056", "part_name": "double stud with hexagon drive", "part_quantity": "1" }, "add": { "info": "AUDI A3", "model": "" } } ], "image": ["https://api.levam.net/images/audi/Bilder/194/194820100.png"], "coord": [ [ { "name": "54", "margin-top": 63.68, "margin-left": 3.27, "width": 4.79, "height": 2.7 } ] ], "part_name": "air distribution housing" }, "model_info": { "Market": "Asia", "Engine": "HR12DE" }, "error": "" } ``` ### Response fields | Field | Description | |---|---| | `parts.parts[].standart` | Core part data: `part_number` (number on the diagram), `part_code` (part number), `part_name`, `part_quantity` | | `parts.parts[].add` | Extra data: `info`, `model` (production period), `type` (`part` / `replacment` / `link` / `annotation`), `node_link` (link to a unit or `no`) | | `parts.image` | Unit diagrams | | `parts.coord` | Coordinates of part numbers on the diagram (percent): `name`, `margin-top`, `margin-left`, `width`, `height` | | `parts.part_name` | Unit name | | `model_info` | Modification parameters | | `error` | Error information; an empty string means no error | --- --- title: Part applicability description: ApplicabilityCars and ApplicabilityNodes methods — which vehicles and units contain a given part number. --- # Part applicability ## ApplicabilityCars Catalogs, families, models and modifications where the part occurs. Cost — 1 unit. ``` GET https://api.levam.net/oem/v1/ApplicabilityCars ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `part_code` | yes | Original part number | | `lang` | no | Response language | ### Example ```bash curl "https://api.levam.net/oem/v1/ApplicabilityCars?api_key=KEY&part_code=34351543830&lang=en" ``` ```json { "error": "", "result": [ { "catalog_code": 3, "catalog_name": "audi", "families": [ { "family_name": "Audi A6", "models": [ { "model_name": "Audi A6 (2015 - 2018)", "model_image": "https://img.levam.net/images/oem/", "modifs": [ { "modif_link": "Vkh0eU1xN3BudXJrRUNDdjFDVEFpZz09--", "props": { "Engine": "DDVE (231ps/170kw/300ltr/6cyl)", "Market": "EUROPA", "Steering": "Left", "Transmission": "8A (SQR)" } } ] } ] } ] } ] } ``` ### Response fields | Field | Description | |---|---| | `result[].catalog_code`, `catalog_name` | Catalog | | `result[].families[].family_name` | Family | | `result[].families[].models[].model_name`, `model_image` | Model | | `result[].families[].models[].modifs[].modif_link` | Modification code — used in `ApplicabilityNodes` and `MaintenanceParts` | | `result[].families[].models[].modifs[].props` | Modification parameters (the field set depends on the catalog) | | `error` | Error information; an empty string means no error | ## ApplicabilityNodes Units of the selected modification that contain the part. Cost — 1 unit. ``` GET https://api.levam.net/oem/v1/ApplicabilityNodes ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `part_code` | yes | Original part number | | `modif_link` | yes | Modification code from `ApplicabilityCars` | | `lang` | no | Response language | ### Example ```bash curl "https://api.levam.net/oem/v1/ApplicabilityNodes?api_key=KEY&part_code=057130764AM&modif_link=UFNINUtxVHpxcmJNZmUrcVNoeS83UT09--" ``` ```json { "error": "", "result": { "catalog_code": 3, "catalog_name": "audi", "family_name": "Audi A6", "model_name": "Audi A6 allroad (2013 - 2018)", "model_image": "https://img.levam.net/images/oem/", "nodes": [ { "image": "https://img.levam.net/images/oem/audi3/AU/Bilder_zgd/675/675130700.png", "node_name": "fuel rail injector unit pressure pipes", "group": "675130700::130080", "parts": [ { "pnc": "4", "part_name": "pressure-relief valve" } ] } ] } } ``` ### Response fields | Field | Description | |---|---| | `result.catalog_code`, `catalog_name`, `family_name`, `model_name`, `model_image` | Vehicle | | `result.nodes[].image` | Unit diagram | | `result.nodes[].node_name` | Unit name | | `result.nodes[].group` | Unit group code | | `result.nodes[].parts[].pnc` | Part number on the diagram | | `result.nodes[].parts[].part_name` | Part name | | `error` | Error information; an empty string means no error | --- --- title: Order check description: OrderCheck and OrderCheckResult methods — asynchronous validation of part numbers against a VIN. --- # Order check Checking whether part numbers fit the vehicle with a given VIN is asynchronous: `OrderCheck` queues a task and returns a `task_id`; `OrderCheckResult` returns the result by `task_id`. ## OrderCheck Queue an order check task. Cost — **2 units**. ``` GET https://api.levam.net/oem/v1/OrderCheck ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `vin` | yes | Vehicle VIN | | `parts_codes` | yes | Part numbers separated by commas | | `order_code` | no | Order code (reserved, not used) | ### Example ```bash curl "https://api.levam.net/oem/v1/OrderCheck?api_key=KEY&vin=WBAUB31060VH40246&parts_codes=24007572464" ``` ```json { "error": "", "result": { "task_id": "4c9caf3deb6cad4eb73a7f7f9c679e57" } } ``` ## OrderCheckResult The check result. Free method — poll until `ready` becomes `true`. ``` GET https://api.levam.net/oem/v1/OrderCheckResult ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `task_id` | yes | Task identifier from `OrderCheck` | ### Example ```bash curl "https://api.levam.net/oem/v1/OrderCheckResult?api_key=KEY&task_id=4c9caf3deb6cad4eb73a7f7f9c679e57" ``` ```json { "error": "", "result": { "ready": true, "result": { "24007572464": { "applicable": true, "replacements": ["24007572465"] } } } } ``` ### Response fields | Field | Description | |---|---| | `result.ready` | `true` — the task is done; `false` — still running, retry later | | `result.result` | "Part number → result" object | | `result.result.*.applicable` | Whether the part fits the vehicle with the given VIN | | `result.result.*.replacements` | Replacement part numbers (a newer part exists) | | `error` | Error information; an empty string means no error | --- --- title: Maintenance parts description: MaintenanceParts method — maintenance parts of the selected modification grouped by category. --- # Maintenance parts ## MaintenanceParts All maintenance parts of the selected modification, grouped by category (brakes, filters, etc.). Cost — 1 unit. ``` GET https://api.levam.net/oem/v1/MaintenanceParts ``` ### Parameters | Parameter | Required | Description | |---|---|---| | `api_key` | yes | API key | | `modif_link` | yes | Modification code (from `VinFind`, `VehicleModificationsGet` or `ApplicabilityCars`) | | `lang` | no | Response language | ### Example ```bash curl "https://api.levam.net/oem/v1/MaintenanceParts?api_key=KEY&lang=en&modif_link=OTM5SElaM2orZi91OUZyNVNrTWwydz09--" ``` ```json { "error": "", "result": { "catalog_code": 3, "catalog_name": "audi", "catalog_image": "https://img.levam.net/images/logos/big/audi.png", "family_name": "Audi 80/90", "model_name": "Audi 80 (1973 - 1976)", "categories": [ { "category_name": "Brake Front", "category_code": "brake_front", "category_image": "https://img.levam.net/images/oem/maintenance_parts/brake_front.svg", "parts": [ { "part_code": "191501615b", "part_name": "brake drum", "part_number": "9", "coords": [{ "top": 128.98, "left": 63.62, "width": 3, "height": 3 }], "node_name": "rear axle beam suspension", "node_group": "016049000::49000", "node_image": "https://img.levam.net/images/oem/audi3/AU/Bilder/016/016049000.png" } ] } ] } } ``` ### Response fields | Field | Description | |---|---| | `result.catalog_*`, `family_*`, `model_*` | Catalog, family and model with images | | `result.categories[].category_name`, `category_code`, `category_image` | Maintenance parts category | | `result.categories[].parts[].part_code`, `part_name` | Part number and name | | `result.categories[].parts[].part_number` | Part number on the unit diagram | | `result.categories[].parts[].coords` | Mark coordinates on the diagram: `top`, `left`, `width`, `height` | | `result.categories[].parts[].node_name`, `node_group`, `node_image` | The unit that contains the part | | `error` | Error information; an empty string means no error | --- --- title: Error codes description: Levam OEM API HTTP statuses and error formats — authorization, balance, internal errors. --- # Error codes ## Format The API returns errors in two ways: 1. **HTTP status + JSON with an `error` field** — authorization and system errors. 2. **The `error` field inside a 200 response** — method-level errors (e.g. VIN not found). An empty `error` string means success. ## HTTP statuses | Status | Body | Reason | What to do | |---|---|---|---| | 200 | `{"...": "...", "error": ""}` | Success | — | | 200 | `{"...": "...", "error": "text"}` | Method-level error (data not found, etc.) | Check the request parameters | | 401 | `{"error": "invalid api key"}` | Key missing, not found, or blocked | Check `api_key` in the [dashboard](https://levam.net/cabinet) | | 403 | `{"error": "Client disabled. not enough money"}` | Out of units or the package expired | Top up the balance in the dashboard | | 404 | `{"error": "error"}` | Unknown method / path | Check the method URL | | 5xx | — | Internal service error | Retry later; contact support if it persists | ## Billing of failed requests Requests that end with an error (any status other than 200) are **not billed** — units are deducted only for successful responses. See [Pricing and billing](/docs/en/billing).