Search documentation

Search across all documentation pages

Get API Key
Endpoints

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

POSThttps://api.zenode.ai/v1/parts/matchFree

Request

JSON
1{
2 "query": "TL072",
3 "manufacturer": "TI",
4 "description": "dual jfet op-amp",
5 "limit": 10
6}
ParameterTypeRequiredDescription
query
stringRequiredPartial or full part number to match
manufacturer
stringOptionalManufacturer hint (free text, e.g. "TI") — improves ranking
description
stringOptionalFree-text hint to disambiguate an ambiguous MPN
limit
intOptionalMax results, default 10, max 50

Response

JSON
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": false
20 }
21 ],
22 "request_id": "req_8f3a..."
23}
ParameterTypeRequiredDescription
query
stringRequiredEchoes the input query
ambiguous
boolRequiredtrue when there is no single clear winner
results
MatchResult[]RequiredRanked best-first; empty if no match
request_id
stringRequiredFor support / tracing

Each MatchResult is { part, confidence, exact }:

ParameterTypeRequiredDescription
part
PartSummaryRequiredSee Objects reference
confidence
int (0–100)RequiredMatch confidence; the ranking key
exact
boolRequiredtrue when the query resolves to exactly this orderable part

Try it

Try itPOST
Body

Partial or full part number

Manufacturer hint (optional)

Disambiguation hint (optional)

Max results (default 10, max 50)

Request body
JSON
1{
2 "query": "TL072",
3 "limit": 10
4}
Request
cURL
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. TL072TL072CP) 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 matchambiguous is false and exactly one result has exact: true, ranked first with high confidence. Safe to auto-accept results[0].
  • Ambiguous — the input matches a family or several plausible parts. ambiguous is true and every result has exact: false (several may have similar confidence). Surface a chooser, or tighten with manufacturer / description.
  • No matchresults is empty and ambiguous is false.

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 query is a 400Bad Request invalid_request for the single endpoint; in a batch it's a per-line error (the rest of the batch still runs).
  • Gibberish / no plausible part — a well-formed but unmatchable query returns results: [] with ambiguous: false (not an error).
  • Very broad query — a query that matches many parts returns the top-ranked, bounded set (limit, max 50) with ambiguous: true; narrow it with manufacturer / description.

Match a BOM (batch)

Resolve many lines in one request. Each line is matched independently, so one bad line never fails the batch.

POSThttps://api.zenode.ai/v1/parts/match/batchFree

Request

JSON
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": 5
15}
ParameterTypeRequiredDescription
queries
BatchQuery[]Required1–250 lines. Order is preserved in the response
limit
intOptionalPer-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:

JSON
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

Try itPOST
Body

Per-line max results (default 5, max 50)

Queries
line 1
line 2
Request body
JSON
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}
Request
cURL
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