- ERP and inventory systems in the parts trade
- Inventory management and ERP systems keep the article master, stock, purchasing, sales and invoicing in one database. In the vehicle parts trade they are used by dismantlers, parts dealers and wholesalers — and the article master is where part data is either documented or entered from memory. This page is written for vendors who build a lookup into such a system.
Where data is missing in the process
An article master in the parts trade is rarely created in one go. It grows out of delivery notes, labels, catalogue searches and calls from the warehouse — and at each of these points something is typed, estimated or left open today:
- Creating an article from a number. The OE number arrives from the label, the delivery note or a photo in several spellings. Whether
5Q0 919 275 Cand5Q0919275Care the same article is decided by the clerk today — see OE number: reading original part numbers correctly. - Name, manufacturer and article type. The article is called „sensor“ because the field had to be filled. A documented name, an article type and the replacement chain are missing.
- Pricing. The selling price of a used part is set from memory because the system holds no basis for comparison.
- Fitment in the order. A customer orders five items for one vehicle, and whether they fit is settled at installation — or in the return.
- Labels at goods receipt. Supplier number, OE number and references are printed on the label and copied into the form by hand, see Part identification: from removed component to sellable record.
What the API delivers
| Process step | Call | Result |
|---|---|---|
| Clean up the number | GET /parts/oe/normalize | Normalised OE number with status matched, unresolved, ambiguous or invalid plus documented replacement numbers |
| Enrich the article | GET /parts/oe/{oeNumber} | part with manufacturer, name, list price, fitment, replacement chain, exactly one tapiGenArt and VDI 4081 assignment |
| Evaluate the price | GET /parts/oe/{oeNumber}/price | Indicative price evaluation from comparison and market references, no price guarantee |
| Check the order | POST /vin/cart-check | fits=true|false per item against the VIN, up to 30 items, complete marks a final no |
| Capture a label | POST /scanner/label/extract-partnumbers | Part and reference numbers from the label image; what is unreadable stays empty |
| Translate a name | GET /translation/translations | Exactly one part name in the supported target languages |
One process from start to finish
- Goods receipt: photograph the label. The ERP sends the image to
POST /scanner/label/extract-partnumbersand receives part and reference numbers. What cannot be read on the image is not returned — the analysis is billed nonetheless, because it was performed. - Clean up the number.
GET /parts/oe/normalizebrings the number read into its comparison form;ambiguousandinvalidgo to a clarification list instead of the article master. - Create the article.
GET /parts/oe/{oeNumber}returns200for a confirmed match, with name, manufacturer, article type and replacement chain;404means no match in the OE stock, not an error. - Propose a price.
GET /parts/oe/{oeNumber}/pricegives an indicative evaluation that the clerk sees and confirms. It does not replace the pricing decision. - Check the order. Before confirming the order, the ERP sends the VIN and the OE items to
POST /vin/cart-check, withmode=typefor the vehicle type ormode=vehiclefor the specific vehicle. - Publish. For multilingual marketplaces and documents,
GET /translation/translationstranslates the name; the article goes into stock and sales with documented fields, see Storage in a dismantling yard: the location that finds the part again.
curl \
-H 'X-Api-Key: <API_KEY>' \
-H 'Content-Type: application/json' \
-d '{
"name": "<CUSTOMER_NAME>",
"externalReference": "erp-customer-4711",
"endpointKeys": ["parts.oe", "vin.cart_check"],
"sponsorship": true
}' \
'https://api.tapinomahub.com/client/partner-workspaces'The integration
- Store the key server-side. The
X-Api-Keybelongs in your backend configuration. It must never reach a browser or a client bundle — not even „just for testing“. - Start with one endpoint. For an ERP that is almost always
GET /parts/oe/{oeNumber}behind article creation. The sequence contract, key, process, go-live is described in the integration guide. - Define the field mapping. Name, manufacturer, article type and replacement chain have fixed targets in the master; the
tapiGenArtgets a field of its own so that filters and marketplaces can use it, see GenArt number: what kind of part is this, actually?. - Separate empty result from error.
404on the OE lookup is a business result: no confirmed match. The ERP creates the article, leaves the fields empty and raises a clarification task. Only a technical error is retried. - Collect asynchronous answers. Cart checks may answer with
202,LocationandRetry-After. The ERP stores the job ID and pollsGET /vin/cart-check/jobs/{jobId}instead of repeating the call. - Roll out. First with one end customer, then broadly.
GET /client/usageand, per workspace,GET /client/users/{clientId}/usageshow which calls run how often.
What to watch out for
- Set an `Idempotency-Key`. On repeatable calls such as the cart check, the header protects against double bookings after a timeout;
X-Tapinoma-Idempotent-Replayflags the replay. Exception:POST /client/partner-workspacesissues a secret key once and is not replayed — after a timeout, reconcile what exists instead of blindly repeating. - Do not fill empty fields. If
manufacturer,nameorlistPricecomes back asnull, the master data field stays empty and the article gets a clarification task. A default value in the article master is more dangerous than a visible gap. - Store the `tapiId`. Where a vehicle was matched through a VIN flow, the
tapiIdbelongs in the vehicle record;GET /vehicles/{tapiId}returns the technical data as part of that paid workflow, without VIN and without equipment. - Never put the key in the browser. A web-based ERP also calls the API from the backend; the browser talks only to your server.
- Set rate limits per workspace.
PUT /client/users/{clientId}/rate-limitslimits per user, key or endpoint so that a faulty import at one end customer does not use up everyone else's quota. - Have the result checked. Price evaluation and fitment statements are the basis for a decision in the ERP, not the decision. The clerk confirms, the system records where a value came from.
What the API does not do
The API does not sell a data set: what is owed is the lookup and the output of its result; checking before use lies with the customer. The price evaluation is indicative and no price guarantee. Vehicle data from provider 1 must not be retrieved directly by third-party systems: there GET /vin/{vin}/vehicle answers redirect_required, and the match runs through a browser session from POST /vin/redirect-sessions that expires after ten minutes; providers 2 and 3 can be queried directly. A keeper lookup, an expert appraisal or a residual value calculation is not something the API provides. And where a field is not documented, it stays null — the API does not guess, and neither should your ERP.
Frequently asked
Can every end customer have its own billing?
Yes. POST /client/partner-workspaces creates a separate, individually billable workspace per end customer. Whether the end customer pays or the ERP vendor covers the cost is configurable per workspace and endpoint.
What happens when an OE number is not found?
GET /parts/oe/{oeNumber} answers 404. That is an empty result, not an error: the ERP creates the article, leaves the fields empty and raises a clarification task.
Is the price evaluation a selling price?
No. It is an indicative evaluation from comparison and market references and no price guarantee. The business sets the price; the ERP shows the evaluation as a basis.
Is a label analysis billed when nothing was readable?
Yes. The service is the analysis, not the hit; an analysis that was performed is billed even if the image yielded nothing. The ERP then stores an empty result and passes the label on for manual capture.
