The question “does the part fit?” decides returns, rework and complaints in parts trading and in the workshop, and a wrong answer usually only surfaces at installation. The data meant to support an answer look confusingly alike: a reference number, a successor number, a list of vehicle types, a parts list for a VIN, a fits=true. But they say different things, and only some of them refer to a vehicle at all. This article ranks six data statements by what they prove about a specific vehicle and shows where the part itself still has to be checked. How the same fields flow into an article is covered in From the OE number to a marketplace-ready article; here the subject is the decision before selling, ordering or fitting.
Why the model and the type code are not enough
The obvious shortcut is the model: “fits series X, year Y”. It does not go far, and the reasons are already written into type-approval law. Under Article 3(32) of Regulation (EU) 2018/858 a vehicle type is a group of vehicles sharing at least the features set out in Annex I Part B; under Annex I Part B every type consists of at least one variant and one version. For passenger cars of category M1, Annex I Part B sets out what each of these levels must have in common. Trim level, options, engine code and changes during the production run are not among those criteria. Two vehicles of the same version can therefore need different parts — and the German type code stands for a vehicle type, not for the individual vehicle. For the system as a whole see Type approval, general approval and expert reports: what each paper means.
| Level | Common features under Annex I Part B (extract) | Consequence for fitment |
|---|---|---|
| Type | Manufacturer; design and assembly of the essential parts of the body structure | Can cover several variants with different power plants |
| Variant | Number of lateral doors or type of bodywork; energy supply and working principle of the power plant; number and arrangement of cylinders; number of axles; number and interconnection of powered axles; number of steered axles | Can cover versions with different engine capacity, power and emission level |
| Version | Technically permissible maximum laden mass; engine capacity; maximum power; nature of fuel; seating positions; emission level; CO2 and consumption values | Trim level, options and engine code are not criteria and can differ within one version |
Number level: reference numbers and the independent aftermarket
GET /parts/oe/{oeNumber} returns confirmed reference and cross-reference numbers grouped by manufacturer under references and merges them in referenceNumbers.oe_oem_reference_numbers, including the confirmed number itself. GET /parts/oe/{oeNumber}/aftermarket-references adds the numbers of independent manufacturers. Both lists answer the question under which numbers a part is kept or searched for — no vehicle appears in them. The service description says so explicitly: an aftermarket reference is no guarantee of technical compatibility, interchangeability, fit or suitability, and an empty list is a successful response. The typical mistake in a shop is therefore a “also fits” list built from reference numbers. Why a reference number points to an application rather than necessarily to an identical part is explained in OE number: reading original part numbers correctly; the market side is described in IAM: the independent aftermarket and where dismantlers sit in it.
Supersession: the replacement edge has a direction
replacementChain contains confirmed, direct, directed replacement edges: from is replaced by to. An empty list means that no directed replacement is documented. The edge says something about numbers, not about a vehicle, and it is documented in the direction of the arrow. Anyone concluding from “B replaces A” that A fits wherever B is installed reads the edge against the arrow; the edge does not document that. Even in the direction of the arrow, the service description says it is no guarantee of interchangeability or fit. Why replacements do not always hold in both directions is covered in OE number: reading original part numbers correctly. Important in practice: the cart check already takes documented replacement numbers into account. fits=true is returned when the checked number itself or a documented replacement number appears in the vehicle's parts list. Per line, however, the response only states oe and fits, not how the match came about. Wherever a replacement may be involved, index and connectors therefore need to be checked on the part.
Type level: the vehicle assignment and its criteria
fitment contains vehicle type assignments: per entry a vehicleTypeKey and the documented criteria. This is the first statement with a vehicle link, but at the level of the type. The criteria are the part most easily lost in transfer: the documented example of the API lists the criterion “Aerodynamikpaket” (aerodynamics package) for one vehicle type and none for another. Copying only the types turns a restricted assignment into a blanket one. Whether the vehicle meets the criterion is not stated by fitment; identified equipment features are returned by the vehicle lookup GET /vin/{vin}/vehicle with includeEquipments, where they have been identified. According to the contract, an empty fitment list is not a statement about undocumented vehicles — it does not mean “fits nothing”.
Vehicle level: the VIN parts list and the cart check
Only with the VIN does the individual vehicle become the starting point. GET /vin/{vin}/parts returns the OE positions identified for the VIN; matchLevel describes how conclusive the result is, because even a list for a VIN may contain only candidates at vehicle type level. A non-empty missingCategories means the parts list is incomplete. How to read the three values of matchLevel is set out in From the VIN to the economic evaluation: the vehicle route. POST /vin/cart-check asks the question from the other side: it takes one to 30 OE positions and checks them against the VIN — with mode=type at vehicle type level, with mode=vehicle for the specific vehicle. The response keeps the order and duplicates of the input and carries complete once: whether the usable parts list was complete.
| Finding | What it states | Correct response |
|---|---|---|
fits=true | The number or a documented replacement number is in the vehicle's parts list | Store it as evidence on the line; confirm side, index and connectors on the part |
fits=false with complete=true | No match in a complete parts list | Reliable exclusion: hold the line, look for an alternative |
fits=false with complete=false | No match found, but the parts list was incomplete | Open question, not “does not fit”: review it instead of blocking automatically |
Result with mode=type | Match at the level of the vehicle type | Check equipment-dependent lines additionally for the vehicle |
404 vehicle_not_found | No vehicle was found for the VIN | Empty finding about the vehicle, no statement about the part |
curl -X POST \
-H 'X-Api-Key: <API_KEY>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: <IDEMPOTENCY_KEY>' \
-d '{"vin":"TAPSANDBX00000001","country":"de","mode":"vehicle","oeNumbers":["SBX0001A","SBX0002B"]}' \
'https://api.tapinomahub.com/vin/cart-check'The order of checks in daily operation
- Settle the number.
GET /parts/oe/normalizeanswers withmatched,unresolved,ambiguousorinvalid. Onlymatchedcontinues without a question; the optionalmanufacturerparameter passes the manufacturer context. If only a description, a label or a customer's number is available,POST /parts/identifydetermines possible OE numbers and distinguishesmatched,candidatesandunresolved— a candidate is not yet a match. - Classify the part. Call
GET /parts/oe/{oeNumber}and storereferences,fitmentandreplacementChainin separate fields. Only then can you later say which statement a detail rests on.404 oe_part_not_foundmeans no confirmed match — the field then stays empty. - Check against the vehicle. Send all lines together to
POST /vin/cart-check, withmode=vehiclefor an order for a particular vehicle. If the service answers202,GET /vin/cart-check/jobs/{jobId}returns the same result format once finished. - Classify the finding. Three outcomes instead of two: evidenced, excluded, open. A
fits=falsewithcomplete=falsegets its own status in your system and is not displayed as “does not fit”. Open lines are reviewed in a targeted way: look at the parts list andmatchLevelfor the VIN, hold thecriteriaof the vehicle assignment against the vehicle's equipment and ask the customer a concrete question — about the feature named incriteria, for instance — instead of “does it fit?”. - Confirm on the part and store the evidence. Compare number, index, side and connectors on the part at hand. Which statement carries the decision —
fits=truewithmodeandcomplete, a vehicle assignment with criteria or the visual check on the part — belongs on the order line. In a complaint, that is the answer to the question of what was relied on.
Where the part itself still has to be checked
- Equipment and options. An assignment with
criteriaholds only if the vehicle meets the criterion. Whether identified equipment features are available depends on the source. - Side and fitting position. Mirror-image parts for left and right are different parts. The check says whether a number belongs to the vehicle — whether the side ordered is the side needed is a separate question. Examples in Headlamps: why the variant matters more than the model.
- Changes to the individual vehicle. Repairs, modifications or an earlier part replacement can limit the result. What counts for fitting is the part actually installed.
- Engine and gearbox variants. Ancillary parts differ by unit; the code belongs in the check — see Engine code: the identifier that separates engine variants and Gearboxes: codes, condition and the sentence that saves returns.
- Electronics. A matching number says nothing about whether a control unit has to be coded or adapted in the vehicle — see Used control units: coding, immobiliser, listing.
- Used parts. What is checked is the number, not the individual item. Whether the part on offer carries this number and this index is shown only by the marking on the part itself.
How the check is built into existing systems is described on the pages for workshop software, marketplaces and shop systems and inventory systems. All fields and error codes are in Check an OE cart against a VIN and in the developer documentation.
Sources and legal references
Frequently asked
Is a reference number a fitment statement?
No. It says under which other number the same or a related part is kept and contains no vehicle link. According to the service description, references are no guarantee of interchangeability or fit.
Does a documented replacement number count in the cart check?
Yes. fits=true is returned when the checked number itself or a documented replacement number appears in the vehicle's parts list. The response does not show which of the two applied; index and connectors still have to be checked on the part.
Are the model or the German HSN/TSN enough for fitment?
For a pre-selection yes, for the decision no. Type, variant and version group vehicles whose equipment, options and engine code can differ. A check against the VIN is more reliable.
When do I use `mode=type` and when `mode=vehicle`?
mode=type checks at vehicle type level, mode=vehicle for the specific vehicle. Where equipment or the individual vehicle decides fitment, mode=vehicle is the right question; the vehicle check may answer 202 as a job.
Does `fits=true` guarantee that the part can be fitted?
No. It indicates a match found in the vehicle's available parts list, possibly via a documented replacement number. Side, index, condition, coding and the part actually installed still have to be checked.
