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:
| Field | Meaning |
|---|---|
query | The part number you searched |
confidence | Match confidence as a 0–1 score (1.0 = exact) |
match_method | How the equivalent was identified (e.g. exact) |
results_count | Number of equivalents returned |
results | The array of equivalent parts |
Each entry in results is a confirmed equivalent:
| Field | Meaning |
|---|---|
brand | OEM brand |
part_number | That brand's equivalent part number |
bore_mm | Bore diameter (mm) |
od_mm | Outer diameter (mm) |
width_mm | Width (mm) |
dynamic_load_kn | Dynamic load rating (kN) |
static_load_kn | Static load rating (kN) |
seal_type | Seal configuration (e.g. 2RS) |
clearance_class | Internal clearance class (e.g. CN) |
weight_g | Weight (g) |
max_speed_grease_rpm | Max 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
| Tier | Price | Daily requests | Notable additions |
|---|---|---|---|
| Free | $0 | 100 | Full search access, all OEM brands, dimensions + load ratings |
| Pro | $49/mo | 5,000 | Pricing data, usage analytics, priority support |
| Business | $199/mo | 50,000 | Bulk 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 invalidX-API-Key.429— daily quota exceeded; check/keys/usageand 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.