Part matching
Part & BOM matching
Turn a partial or full part number into a canonical Zenode part. This is the BOM / part-identification
workhorse. Matching returns PartSummary overview data and is
free — see Usage billing.
parts:read
Match a part
https://api.zenode.ai/v1/parts/matchFreeRequest
1{2 "query": "TL072",3 "manufacturer": "TI",4 "description": "dual jfet op-amp",5 "limit": 106}| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Required | Partial or full part number to match |
manufacturer | string | Optional | Manufacturer hint (free text, e.g. "TI") — improves ranking |
description | string | Optional | Free-text hint to disambiguate an ambiguous MPN |
limit | int | Optional | Max results, default 10, max 50 |
Response
1{2 "query": "TL072",3 "ambiguous": true,4 "results": [5 {6 "part": {7 "mpn": "TL072CP",8 "mpn_slug": "TL072CP",9 "manufacturer": {10 "slug": "texas-instruments-inc",11 "name": "Texas Instruments"12 },13 "description": "...",14 "image": "https://cdn.zenode.ai/...",15 "status": "active",16 "url": "https://zenode.ai/part/texas-instruments-inc/TL072CP"17 },18 "confidence": 88,19 "exact": false20 }21 ],22 "request_id": "req_8f3a..."23}| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Required | Echoes the input query |
ambiguous | bool | Required | true when there is no single clear winner |
results | MatchResult[] | Required | Ranked best-first; empty if no match |
request_id | string | Required | For support / tracing |
Each MatchResult is { part, confidence, exact }:
| Parameter | Type | Required | Description |
|---|---|---|---|
part | PartSummary | Required | See Objects reference |
confidence | int (0–100) | Required | Match confidence; the ranking key |
exact | bool | Required | true when the query resolves to exactly this orderable part |
Try it
Partial or full part number
Manufacturer hint (optional)
Disambiguation hint (optional)
Max results (default 10, max 50)
1{2 "query": "TL072",3 "limit": 104}curl -X POST "https://api.zenode.ai/v1/parts/match" \ -H "Authorization: Bearer <YOUR_API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "query": "TL072", "limit": 10}'Confidence, exact, and ambiguous
confidence (0–100) is a per-candidate match score — how closely that one part's MPN matches
your query string, on its own (independent of the other results or your limit). It's a string
similarity: an exact MPN reads 100, a query that is the start of a longer variant (e.g. TL072 →
TL072CP) stays high, and parts that diverge from your query fall off in proportion to how
different they are — so a genuinely different part won't sit at 90% just because it shares a leading
prefix. Use exact and ambiguous as the hard signals to branch on:
- Unambiguous exact match —
ambiguousisfalseand exactly one result hasexact: true, ranked first with highconfidence. Safe to auto-acceptresults[0]. - Ambiguous — the input matches a family or several plausible parts.
ambiguousistrueand every result hasexact: false(several may have similarconfidence). Surface a chooser, or tighten withmanufacturer/description. - No match —
resultsis empty andambiguousisfalse.
exact compares the full part number including separators: a query missing a - (e.g. LM358N
vs the orderable LM358-N) can still be the top result with high confidence, but it is not
exact — they're different orderable parts. When in doubt, confirm the mpn on the result.
confidence is a relative match score, not a statistically calibrated probability — use it to rank
and to set a display threshold, but treat exact / ambiguous as the signals to branch on, and
don't compare a confidence value across different queries as if it were an absolute score.
Input handling
- Empty query — a missing or empty
queryis a 400Bad Requestinvalid_requestfor the single endpoint; in a batch it's a per-lineerror(the rest of the batch still runs). - Gibberish / no plausible part — a well-formed but unmatchable
queryreturnsresults: []withambiguous: false(not an error). - Very broad query — a query that matches many parts returns the top-ranked, bounded set
(
limit, max 50) withambiguous: true; narrow it withmanufacturer/description.
Match a BOM (batch)
Resolve many lines in one request. Each line is matched independently, so one bad line never fails the batch.
https://api.zenode.ai/v1/parts/match/batchFreeRequest
1{2 "queries": [3 {4 "id": "line-1",5 "query": "TL072CP",6 "manufacturer": "TI"7 },8 {9 "id": "line-2",10 "query": "GRM188R71C104KA01",11 "description": "0603 100nF X7R"12 }13 ],14 "limit": 515}| Parameter | Type | Required | Description |
|---|---|---|---|
queries | BatchQuery[] | Required | 1–250 lines. Order is preserved in the response |
limit | int | Optional | Per-line max results, default 5, max 50 |
Each BatchQuery has the single-match fields plus an optional client-supplied id, echoed back
so you can re-join results to your own rows. Over 250 lines returns a top-level 400Bad Request.
Response
One entry per input line, in the same order — each with the same ambiguous / results shape, or a
per-line error:
1{2 "results": [3 { "id": "line-1", "query": "TL072CP", "ambiguous": false, "results": [ /* MatchResult */ ], "error": null },4 { "id": "line-3", "query": "", "ambiguous": false, "results": [], "error": { "type": "invalid_request", "message": "Field 'query' is required.", "param": "query" } }5 ],6 "request_id": "req_5c40..."7}A 200OK is returned even when individual lines fail — inspect each line's error. See
Errors.
Matching is free — batching 250 lines is an ergonomic convenience, not a billing concern. You pay only when you fetch a full part record. See Usage billing.
Try it
Per-line max results (default 5, max 50)
1{2 "limit": 5,3 "queries": [4 {5 "id": "line-1",6 "query": "TL072CP",7 "manufacturer": "TI"8 },9 {10 "id": "line-2",11 "query": "GRM188R71C104KA01",12 "description": "0603 100nF X7R"13 }14 ]15}curl -X POST "https://api.zenode.ai/v1/parts/match/batch" \ -H "Authorization: Bearer <YOUR_API_KEY>" \ -H "Content-Type: application/json" \ -d '{ "limit": 5, "queries": [ { "id": "line-1", "query": "TL072CP", "manufacturer": "TI" }, { "id": "line-2", "query": "GRM188R71C104KA01", "description": "0603 100nF X7R" } ]}'Next
- Manufacturers — resolve a manufacturer name to a slug
- Part Catalog search — discovery by query + filters