Parts partner API

Approved stores supply prices, availability and fitment directly. Ask your R.A.C.E. administrator to register your store and approve its website before requesting a key.

Authentication

Send your key in the Authorization header: Bearer YOUR_KEY. Never put it in a URL. Keys are shown once; rotating a key immediately invalidates the old one. Paused and revoked stores cannot use the API and their offers are hidden.

Push a batch

POST /api/parts/partner/catalog with Content-Type: application/json (an array) or text/csv. Maximum 100 products and 1 MiB per request, 30 requests per minute per store. A batch is atomic: an invalid row rejects the entire batch. Upserts use the location code and SKU. Send every field on each update. Omitted products remain until they expire; send stock 0 and availability out_of_stock to mark unavailable.

[
  {
    "sku": "FILTER-1",
    "brand": "Example",
    "partNumber": "A-100",
    "title": "Oil filter",
    "category": "Oil filters",
    "price": 12.5,
    "currency": "USD",
    "stock": 4,
    "availability": "in_stock",
    "location": {
      "code": "austin",
      "name": "Austin store"
    },
    "productUrl": "https://store.example/filter-1",
    "fitment": [
      {
        "year": 2020,
        "make": "Example",
        "model": "Roadster",
        "engine": "2.0L"
      }
    ],
    "lastUpdated": "2026-09-15T00:00:00Z"
  }
]

Use your approved website hostname for productUrl; URLs must use HTTPS without credentials. imageUrl is optional. availability is in_stock, out_of_stock or backorder. Prices use up to two decimals. Timestamps are ISO 8601 with a timezone and cannot be in the future or older than the stored update.

CSV

Use the same fields, with locationCode and locationName instead of location. fitment is a JSON array in a quoted CSV cell; double embedded quotes. Standard CSV quoted commas and newlines are supported. No partner identifier is accepted in a product.

sku,brand,partNumber,title,category,price,currency,stock,availability,locationCode,locationName,productUrl,fitment,lastUpdated

Fitment and freshness

Only explicit year/make/model rows, including engine when supplied, can confirm fit. An empty fitment array means fit not verified. Titles never establish fitment. Offers expire after 24 hours by default; send updates at least daily and preserve the actual supplier update timestamp. A replay does not refresh that timestamp.

ACES and PIES

Raw ACES/PIES XML is not yet enabled. Its coded reference data requires the licensed adapter. Until that is available, export explicit product and vehicle rows into the JSON/CSV format above. Unresolved IDs are never treated as confirmed fitment.

Read your catalog and handle errors

GET /api/parts/partner/catalog?offset=0 returns up to 100 of your products. Increment offset by 100 for the next page. Keys can only access their own catalog. Responses use no-store. HTTP 400 means invalid feed, 401 means credentials refused, 429 means rate limited (wait a minute), and 500 means retry later. Administrators can see the last successful sync and a sanitized error summary. Keep keys and Authorization headers out of your own logs.