# PartPin > Drop-in part-number search and cross-reference for B2B distributor catalogs. Tolerates typos, formatting differences, competitor numbers, and superseded revisions — and it does not assert a match it isn't sure about. ## What this is PartPin is an identifier-resolution engine for distributors who sell parts by part number. Customers type numbers with the wrong delimiters, the wrong case, a competitor's prefix, or a revision that has since been superseded — and most catalog search returns nothing. PartPin resolves those to the right SKU through a tiered resolver: exact match on a strictly normalized key, then edit-distance and token-overlap candidates. ## The doctrine A wrong part number is worse than no result: it ships the wrong part. PartPin only *asserts* a match at the exact tier, and only when the raw key is unambiguous. Everything else is returned as a ranked candidate for a human to confirm. Confirming a candidate writes the alias back, so the same query asserts next time. ## Who it's for - B2B distributors with their own parts catalog and a weak search box - MRO, industrial, bearing, filter, and fastener suppliers - Anyone whose customers search by identifier rather than by description ## Key features - Tiered resolver: exact (asserted) then fuzzy candidates (never asserted) - Typo, delimiter, case, and superseded-revision tolerance - Competitor / interchange cross-reference lookup - Alias write-back: confirmed matches are remembered per tenant - Catalog autopsy: score an existing search box against a real catalog - Zero-result query log, so you can see what customers ask for and miss - REST API for embedding in an existing storefront ## Endpoints - `POST /api/resolve` — resolve a query against a catalog (free, no-auth demo) - `POST /api/autopsy` — score a catalog's search behaviour (free, no-auth demo) - `/api/v1/*` — the authenticated, per-workspace REST API (see Agent access below) ## Use with your AI agent PartPin ships three doors into your own workspace, all opened by one API key from the dashboard (API KEY card): a remote MCP server, a REST API with an OpenAPI document, and a CLI. - MCP server (Streamable HTTP, dual-era, stateless): `/mcp` - REST API: `/api/v1/*` (`Authorization: Bearer pk_...` or `?key=`) - OpenAPI 3.1 document: `/openapi.json` - CLI: `npx partpin` (npm package `partpin`, zero dependencies) - Full setup for Claude Code, claude.ai/Claude Desktop, Cursor, ChatGPT/Codex and the CLI: `/docs/agents` ## Operator and terms PartPin is operated by Heron Networks LLC. Support: hello@heronnetworks.net. Pricing (published, no meter, no sales call; /pricing): Free forever, not a trial — 1,000 resolves a month on a 25,000-SKU catalog. Counter $99/month (50,000 resolves, 250,000 SKUs), Branch $299/month (250,000 resolves, 1,000,000 SKUs), Chain $699/month (1,000,000 resolves, 2,500,000 SKUs). The autopsy, sign-up and catalog upload are always free. Billed monthly through Stripe; cancel from the dashboard and keep the period you paid for. Sample catalog to upload: `/sample-catalog.csv` (columns sku,title,aliases,supersedes,fits,ref; aliases separated by semicolons). An optional maker column (brand, manufacturer, mfr, mfg, maker or make) makes "SKF 6203-2RS" match only SKF's row; a typed maker that does not print the number is shown to verify, never asserted. An optional supersedes column (also read as replaces, superseded, old part number, previous part number, formerly) lists the RETIRED numbers a part replaces, semicolon-separated: a search for one answers tier "superseded", "has been replaced by ", asserted only when exactly one part replaces it. Two replacements for one old number are both shown to verify, never picked. Cross-reference columns: every column named for an OEM, competitor, interchange, cross-reference or equivalent number (OEM Number, Competitor Part #, Competitor 2, Timken Interchange, Cross-Reference Number, aliases, ...) is read, semicolon- separated, and each number remembers its column. A search for one answers tier "alias" with xref.line "Matches (cross-reference from your catalog)" and xref.column; a number listed on two parts shows both, never picks. An optional superseded by column (also replaced by, replacement, new part number, use instead) on a RETIRED row names its replacement; supersedes and superseded-by records are followed to the current number and the chain is returned (match.chain). A number the feed does not carry answers notStocked.noCrossReference. The upload response's xref object reports the columns found, rows mapped and rows with no cross-reference. An optional fits column (also read as used on, compatible with, machine, model) lists the machine MODELS a part is listed as used on, semicolon-separated; an optional ref column (also item no., diagram ref) is the part's number on the maker's diagram, and "MODEL @ REF" gives a reference that differs by model. A search for a model answers tier "fits": the parts the feed lists for it, each with its reference, asserted only as "listed as used on " and never inferred. Models that differ by one character (28-276 / 28-276A) are never merged. A model the feed does not list answers its closest listed models (nearModels, with a plain note) to check, and no part. A query no exact, alias, superseded or fits tier owns answers tier "not_stocked": a plain "is not in this catalog" sentence, up to three parts the shop does stock (each "Verify, not the same part", never asserted) and the shop's own contact line when the shop set one (PUT /api/v1/shop, the dashboard, `partpin contact`, the set_shop_contact MCP tool; PartPin never writes a phone number for a shop). Each such search is listed in the shop's miss report with the parts it offered. Built-in cross-references (always shown to verify, never asserted): deep-groove bearing seal/shield suffixes, and fuses and breakers of the same class and rating (Bussmann / Mersen / SSAC; Eaton CHQ / Square D QO), each cited to its public source. Your catalog, your confirmed aliases and your query log remain yours; they are never used to answer another tenant's lookups and are never sold. ## Links - Site: https://partpin.net - Autopsy: https://partpin.net/autopsy - FAQ (is it free, how to start): https://partpin.net/faq - Pricing: https://partpin.net/pricing - Terms of Service: https://partpin.net/terms - Privacy Policy: https://partpin.net/privacy ## Contact - Support: hello@heronnetworks.net - Phone (business line): +1 703-249-9248 - Operated by Heron Networks LLC