The OE number is the currency of the parts trade. It sits on the label, on the invoice, in the customer enquiry and in the donor vehicle's parts list. The problem: a number alone sells nothing. Between “5Q0941773B” and an article that a search engine finds and a marketplace filter lets through lie the name, the usage, the reference numbers, the category and the item specifics. This route describes which calls of the tapinomahub API take that distance off your hands.
Why the number is normalised first
The same number is kept in half a dozen notations inside one business: with hyphens, with spaces, in lower case, with a colour index appended. GET /parts/oe/normalize checks the notation against the known rules and answers with a status that decides how the rest proceeds. The call is cheap, fast and prevents the most expensive kind of error: a clean query against a number that does not exist.
| `status` | Meaning | Response in your system |
|---|---|---|
matched | The number is confirmed; normalizedOeNumber and lookupKey are in the response | Continue with the normalised number, not the one that was typed in |
ambiguous | The number fits several manufacturers or rules; knownCandidates lists them | Pass manufacturer and ask again, or let a person decide |
unresolved | Formally plausible but not found in the reference data | Create the article without reference data or hold it — never invent a number |
invalid | Formally not an OE number; reasons states why | Correct the input; this is almost always a reading or typing error |
The core: part, fitment, replacement, references
GET /parts/oe/{oeNumber} is the central call of the whole route. It returns four lists that are separate in substance and often confused in practice — and that separation is precisely the value of the answer. The service description is in Compare OE part name, fitment, reference family and replacement chain.
curl \ -H 'X-Api-Key: <API_KEY>' \ 'https://api.tapinomahub.com/parts/oe/5Q0919275C?manufacturer=VW'
| Field | Content | Use |
|---|---|---|
normalizedOeNumber | The confirmed, unified notation | The key under which the article is kept in stock |
part.name, part.manufacturer | Part name and manufacturer where available | Title building block and item name; null when nothing is documented |
part.listPrice | Optional list price of the part | Orientation for your own calculation, not a market price |
tapiGenArt, vdi | Part-type classification and VDI 4081 codes | Category assignment, dismantling planning, analysis by part type |
fitment[] | Vehicle type assignments with vehicleTypeKey and documented criteria | The usage list in the listing — the most common reason returns are avoided |
replacementChain[] | Directed edges: from is replaced by to | Spot successor parts, keep old stock findable under the current number |
references[], referenceNumbers | Reference numbers grouped by manufacturer and merged | Search hits from customers who know a different number than yours |
When the independent aftermarket matters
Many customers do not know the OE number but the number of an aftermarket manufacturer. GET /parts/oe/{oeNumber}/aftermarket-references returns the IAM references found: per entry partNumber in its original notation, normalizedPartNumber without special characters, and manufacturer. count gives the total; limit and offset fetch the list page by page, and page.hasMore says whether something is still missing. When no references exist, the response is successful and the list is empty — that is not an error, see Determine aftermarket references for an OE number.
The marketplace side: title, category, item specifics
GET /parts/oe/{oeNumber}/seo is the call that turns part data into selling copy. marketplaceId selects the marketplace — the documented values are the eBay marketplaces EBAY_AT through EBAY_US, with EBAY_DE as the default. language selects the language of the generated content, vehicleType separates car and motorcycle. Described in detail in Optimise an eBay or marketplace article (SEO enrichment).
curl \ -H 'X-Api-Key: <API_KEY>' \ 'https://api.tapinomahub.com/parts/oe/5Q0919275C/seo?marketplaceId=EBAY_FR&language=fr&vehicleType=car'
| Response field | Target field in the channel | Effect |
|---|---|---|
content.ebayTitle | Item headline | At most 80 characters, calculated against the marketplace limit |
categoryId | Marketplace category | Without the right category no filter and no search refinement applies |
itemSpecifics[] | Item specifics | Per entry a name and a value list — the fields that feed the filters |
keywords[] | Search terms, shop tags | Basis for internal search and long-tail pages in your own shop |
content.title, content.h1, content.slug | Shop page | Headline, page title and address of your own article page |
content.metaTitle, content.metaDescription, content.bulletPoints | Search engines and item description | Preview texts and a list of the essential characteristics |
- `404 seo_no_exact_match` means there is no exact match for the number in the chosen vehicle path. The response names
oeNumber,marketplaceId,languageandvehicleType— checkvehicleTypefirst. - `400 unsupported_marketplace_language` means the selected marketplace does not carry that language. That combination belongs in your configuration, not in the individual call.
- `liveAvailability` with `status: "PAUSED"` shows that live enrichment is currently paused;
availableAtandretryAfterSecondsgive the earliest retry. The same as an error:429 seo_live_requests_paused. - The result is publication content, not a fitment statement. It must be checked independently for accuracy and permissibility before publication — item specifics included, and especially those.
The price range, when you need it
GET /parts/oe/{oeNumber}/price returns an indicative valuation: new and used with min, max and average, plus priceRecommendation with confidence as HIGH, MEDIUM or LOW. result states where you stand: priced means usable offers were found; no_listings_found means there were none — the response then carries zero values, and that is not a price but an empty finding. A valuation with LOW rests on few offers; its midpoint cannot carry a purchase decision. See Evaluate the price of an OE part and Dynamic pricing for used parts without giving up control.
Replacement chains: the quiet revenue lever
Manufacturers replace part numbers several times over a model cycle. An article kept only under the oldest number is invisible to customers who know the newest — and the other way round. replacementChain makes that direction visible: from is replaced by to. Record the whole chain as search terms and reference numbers on the article, and your stock is found under every number that was ever valid. More in OE, OEM, OES and IAM: the difference in one overview and New, used, remanufactured, replica: four terms, two dimensions.
Billing, repeats and rate limits
- An empty finding and a technical non-execution remain separate. The commercial treatment of
404 oe_part_not_foundfollows only the terms shown before ordering and agreed in the contract. - `422 ambiguous_oe_number` means the number could not be resolved unambiguously. Pass
manufacturerinstead of guessing. - Rate limits apply per endpoint key, not flatly to the account. One active call per client is permitted at a time; further requests are rejected with
429 client_request_in_progress. - Responses belong in your database. Part data, fitment and references rarely change. Repeating the call on every page view costs money and gains nothing.
- The `X-Tapinoma-Billing-Source` header names the billing decision:
plan,balance,bundle,sandboxoridempotent_replay. For accounting it is a more reliable source than an assumption.
The workflow in the inventory system
- Normalise the number and record the
statuson the article. Onlymatchedcontinues without a question. - Fetch part data and store the four lists separately. Throwing references and fitment into one field means you can no longer explain where a statement came from.
- Load IAM references when you carry aftermarket parts or your customers search with aftermarket numbers. Work page by page on long lists.
- Request marketplace data per target channel and target language. An article for three countries needs three calls, not a translation of the German text.
- Map item specifics onto the channel's mandatory fields and make missing mandatory fields visible instead of filling them with assumptions.
- Request the price range only where it carries a decision — at initial pricing and on slow movers, not for every article every day.
- Measure after publication: channel rejections, corrections, returns due to fit, share of articles without a category.
Limits you need to know
- No assurance of fit. Reference, fitment and replacement are documentation. The technical check on the actual vehicle stays with whoever fits the part.
- Empty lists are information about data. Rare series, special versions and very old parts are less documented. That is a coverage question, not a quality statement about the part.
- Texts are proposals, not approvals. Brand and manufacturer names may be references but must not suggest origin; misleading statements about essential characteristics are unlawful.
- A price range is not a price guarantee. The output is explicitly indicative and not a binding buying or selling statement.
- Categories and specifics change. Marketplaces rework their structures. A lookup from two years ago is not the current state once a channel has rebuilt its fields.
All fields, error codes and example responses are in the developer documentation. If you start from a photo or from a whole vehicle instead of a number, the other two routes are From part photo to listing: the image route through the tapinomahub API and From the VIN to the economic evaluation: the vehicle route.
Sources and legal references
Frequently asked
Do I have to normalise the number first?
Not strictly, but it is sensible. Normalisation settles notation and uniqueness and prevents lookups against numbers that do not exist in that form.
What is the difference between a reference number and a replacement?
A reference number designates the same or a related part at another manufacturer. A replacement is directed: the part in from was replaced by the manufacturer with to.
Do I get separate data for each marketplace?
Yes. marketplaceId and language determine category, specifics and copy. For three countries you call three times instead of translating one text.
Is a lookup without a hit charged?
The commercial treatment of an empty finding follows only the terms shown before ordering and agreed in the contract.
Does the service guarantee better rankings?
No. What is owed is the supply of complete, structured data. How a marketplace or a search engine treats it is their own decision.
