You are in spectator mode. Sign in to load data and interact.
Products
Parts Pricing API

Live cross-supplier parts pricing & compatibility, one API call

Query brand, model, or part identifiers and get structured matches, observed prices, stock status, freshness, and source-backed confidence for repair and procurement systems.

View example
Response surface
100
Match score
< 24h
Freshness
multi
Suppliers
metered
Billing

Problem / audience

Parts data breaks when every supplier names the same object differently.

Agentry normalizes the messy layer: part numbers, alternate identifiers, observed supplier prices, availability text, and model compatibility signals.

Appliance and HVAC repair SaaS
Quote replacements and alternates without sending techs into stale catalog tabs.
Parts e-tailers
Benchmark supplier pages, detect availability changes, and fill compatibility gaps.
Procurement teams
Normalize price, stock, and source evidence across vendors before buying at scale.

Try it

One request, structured supplier intelligence.

POST /api/v1/parts/query
cURL request
curl -X POST \
  -H "Authorization: Bearer $AGENTRY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "brand": "Whirlpool",
  "model_number": "WRS325SDHZ",
  "part_number": "W10311524",
  "exact_match": false,
  "limit": 5,
  "include_offers": true,
  "include_sources": true,
  "include_alternates": true,
  "include_supersessions": true,
  "max_age_hours": 720,
  "allow_partial": true,
  "create_job_if_missing": true,
  "create_job_if_stale": true,
  "preferred_vendors": [
    "RepairClinic",
    "Encompass",
    "PartSelect"
  ]
}' \
  /api/v1/parts/query
JSON response
{
  "lookup_type": "flex_query",
  "lookup_value": "Whirlpool|WRS325SDHZ|W10311524",
  "status": "complete",
  "status_reason": null,
  "freshness_summary": {
    "max_age_hours": 720,
    "freshest_observed_at": "2026-06-12T18:41:22Z",
    "stale_count": 0,
    "total_records": 3,
    "stale_ratio": 0
  },
  "missing_summary": {
    "missing": []
  },
  "product": null,
  "parts": null,
  "offers": null,
  "results": [
    {
      "part_number": "W10311524",
      "brand": "Whirlpool",
      "model_number": "WRS325SDHZ",
      "part_title": "EveryDrop refrigerator air filter",
      "part_price": 1899,
      "availability_status": "in_stock",
      "product_page_url": "https://supplier.example/parts/W10311524",
      "image_url": "https://supplier.example/images/W10311524.jpg",
      "match_score": 100,
      "match_reason": "part_number, model_number, brand",
      "matched_fields": [
        "part_number",
        "model_number",
        "brand"
      ],
      "returned_when_not_exact": false
    },
    {
      "part_number": "W10311524",
      "brand": "Whirlpool",
      "model_number": "WRS325SDHZ",
      "part_title": "Compatible refrigerator air filter",
      "part_price": 1695,
      "availability_status": "in_stock",
      "product_page_url": "https://supplier.example/compatible/W10311524",
      "image_url": null,
      "match_score": 90,
      "match_reason": "part_number, model_number",
      "matched_fields": [
        "part_number",
        "model_number"
      ],
      "returned_when_not_exact": true
    }
  ],
  "observations": null,
  "jobs_created": [],
  "generated_at": "2026-06-12T18:41:23Z"
}

Pricing

Starter and Scale, metered per request.

static fallback
v1

Starter 100k/mo

$0.009
/ request
Included volume100k requests/mo
Rate limit120/min
Burst20 / 10s
v1

Scale 1M/mo

$0.009
/ request
Included volume1M requests/mo
Rate limit600/min
Burst80 / 10s

How it works

From key to first call.

01
Get a key
Create customer API access in the developer portal.
02
Subscribe to a plan
Choose Starter or Scale for metered Parts API usage.
03
Call the API
POST brand, model, or part identifiers and receive structured matches.

FAQ / trust

Built for production quoting, not demo data.

Scoped API keys require parts.read and parts.lookup; usage is billed through the customer API ledger.
What makes this different from a static parts catalog?
The API returns observed supplier pricing, availability, freshness, and match confidence, not only a stored part record.
Can it handle incomplete inputs?
Yes. The request accepts brand, model_number, part_number, or legacy lookup_type and lookup_value fields, with exact or best-match behavior.
What happens when data is stale or missing?
Responses include freshness and missing summaries, and the API can create refresh jobs when missing or stale data is encountered.

Put live parts pricing behind your repair workflow.

Create an account, activate a Parts API plan, and make your first server-side call — all self-serve.