How to Integrate Cross-Reference Parts Data with the Partmatch API

How to Integrate Cross-Reference Parts Data with the Partmatch API

A maintenance tech needs to replace an SKF 6205-2RS. The shelf has FAG and NSK in that size, but are they actually equivalent — same bore, same load ratings, same seal? Confirming it usually means digging through manufacturer PDFs or leaning on tribal knowledge. That lookup is exactly what the Partmatch API removes: send one part number, get back verified equivalents across every major brand, each with the specs that prove the match.

This guide walks through integrating that data into your own system — an ERP, a CMMS, a procurement workflow, or an e-commerce catalog. It covers authentication, the core endpoints, the response format, and a few real integration patterns. Today the API covers bearings and V-belts, with more categories on the way. It's the same cross-reference data that AI assistants already pull from when they answer "what's equivalent to a 6205-2RS" — now directly callable from your code.

Quick start

Three steps to your first result.

1. Get a free API key

Free tier, self-serve, no card required: grab a key on the developers page. Keys look like pm_live_.... You can also create one programmatically — see Authentication.

2. Make your first call

curl -H "X-API-Key: pm_live_your_key_here" \
  "https://bearing-platform-production.up.railway.app/api/v1/public/bearings/search?q=6205-2RS"

3. Read the response

{
  "query": "6205-2RS",
  "confidence": 1.0,
  "match_method": "exact",
  "results_count": 5,
  "results": [
    {
      "brand": "SKF",
      "part_number": "6205-2RS1",
      "bore_mm": 25,
      "od_mm": 52,
      "width_mm": 15,
      "dynamic_load_kn": 14.8,
      "static_load_kn": 7.8,
      "seal_type": "2RS",
      "clearance_class": "CN",
      "weight_g": 91,
      "max_speed_grease_rpm": 18000
    },
    {
      "brand": "FAG",
      "part_number": "6205-2RSR"
    },
    {
      "brand": "NSK",
      "part_number": "6205DDU"
    }
  ]
}

Every result is a confirmed equivalent with full specs. That's it — you're cross-referencing parts in three lines.

Authentication

All requests authenticate with your key in the X-API-Key header:

X-API-Key: pm_live_your_key_here

The free tier is self-serve. To create a key programmatically, POST your email to the keys endpoint:

curl -X POST -H "Content-Type: application/json" \
  -d '{"email":"you@company.com"}' \
  "https://bearing-platform-production.up.railway.app/api/v1/public/keys"

This returns a new pm_live_... key. Store it server-side and never ship it in client-side code — anyone with the key can spend your daily quota.

Endpoints

Base URL: https://bearing-platform-production.up.railway.app/api/v1/public

Search bearing equivalents

GET /bearings/search?q={query}

Search by part number or by dimensions. Returns every matching brand with full specs (the call shown in the quick start). Pass a manufacturer part number as q.

Get a specific bearing's specs

GET /bearings/{part_number}

Returns the detailed specification record for one exact part number — the same fields documented below.

curl -H "X-API-Key: pm_live_your_key_here" \
  "https://bearing-platform-production.up.railway.app/api/v1/public/bearings/6205-2RS1"

Search V-belt equivalents

GET /belts/search?q={query}

Same idea for V-belts. Accepts profile/length part numbers like A68, B75, or 5V1060, and returns matching brands with specs.

curl -H "X-API-Key: pm_live_your_key_here" \
  "https://bearing-platform-production.up.railway.app/api/v1/public/belts/search?q=B75"

Check your usage

GET /keys/usage

Returns your current day's request count and remaining quota — useful for monitoring before you hit a rate limit.

Create a key

POST /keys

Creates a new API key. Requires email in the JSON request body (see Authentication).

Understanding the response

Search responses have a few top-level fields and an array of results:

FieldMeaning
queryThe part number you searched
confidenceMatch confidence as a 0–1 score (1.0 = exact)
match_methodHow the equivalent was identified (e.g. exact)
results_countNumber of equivalents returned
resultsThe array of equivalent parts

Each entry in results is a confirmed equivalent:

FieldMeaning
brandOEM brand
part_numberThat brand's equivalent part number
bore_mmBore diameter (mm)
od_mmOuter diameter (mm)
width_mmWidth (mm)
dynamic_load_knDynamic load rating (kN)
static_load_knStatic load rating (kN)
seal_typeSeal configuration (e.g. 2RS)
clearance_classInternal clearance class (e.g. CN)
weight_gWeight (g)
max_speed_grease_rpmMax rotational speed, grease lubrication (rpm)

The confidence and match_method fields are the ones to build logic on: a 1.0 / exact match can be auto-accepted, while a lower-confidence result can be routed to a human before a substitution is approved. That distinction is what makes the data safe to wire into procurement gating rather than just displaying it.

Code examples

Python

import requests

BASE = "https://bearing-platform-production.up.railway.app/api/v1/public"
HEADERS = {"X-API-Key": "pm_live_your_key_here"}

resp = requests.get(
    f"{BASE}/bearings/search",
    params={"q": "6205-2RS"},
    headers=HEADERS,
)
data = resp.json()

for part in data["results"]:
    print(part["brand"], part["part_number"],
          f'{part.get("bore_mm")}x{part.get("od_mm")}x{part.get("width_mm")}')

JavaScript

const BASE = "https://bearing-platform-production.up.railway.app/api/v1/public";

const res = await fetch(`${BASE}/bearings/search?q=6205-2RS`, {
  headers: { "X-API-Key": "pm_live_your_key_here" },
});
const data = await res.json();

data.results.forEach((p) => console.log(p.brand, p.part_number));

Rate limits and tiers

TierPriceDaily requestsNotable additions
Free$0100Full search access, all OEM brands, dimensions + load ratings
Pro$49/mo5,000Pricing data, usage analytics, priority support
Business$199/mo50,000Bulk data exports, custom integrations, SLA, dedicated support

Check remaining quota any time with GET /keys/usage. If you exceed your daily limit, requests return HTTP 429 — back off and retry the next day, or upgrade your tier.

Integration patterns

CMMS — verify substitutions at the work order. When a work order specifies a part that's out of stock, call /bearings/search and surface verified equivalents inline. Gate procurement approval on the match: auto-approve confidence: 1.0 / match_method: "exact", flag anything lower for a human.

def suggest_replacement(part_number):
    data = requests.get(
        f"{BASE}/bearings/search",
        params={"q": part_number},
        headers=HEADERS,
    ).json()
    auto_ok = data["confidence"] == 1.0 and data["match_method"] == "exact"
    return {"equivalents": data["results"], "auto_approve": auto_ok}

E-commerce — enrich product pages. Add a "fits in place of" section to each listing so a buyer searching for an SKF part finds your FAG or NSK equivalent.

Catalog normalization. Map an existing inventory to a canonical record, identify duplicates that are the same part under different brand numbers, and clean up a fragmented parts catalog.

Error handling

Conventional HTTP status codes:

  • 401 / 403 — missing or invalid X-API-Key.
  • 429 — daily quota exceeded; check /keys/usage and retry the next day or upgrade.

Handle those two cases and the integration is production-ready.

Get started

Pull a free key, make the call above, and you're cross-referencing parts in minutes. Bearings and V-belts are live today, with more categories coming.

Get your free API key →