AI
AIWT
aiwheeltech.com
// developer api ยท v1

Fitment intelligence,
via REST.

The same database that powers Manchester Alloys, International Alloys, Ally and Whell โ€” now exposed as a simple, tiered API. Free for makes & models. Paid for the data your business actually runs on.

Pricing tiers

๐ŸŸข Free
ยฃ0
forever ยท no card
  • โœ“ /makes, /models, /years, /variants
  • โœ“ /lookup (vehicle shell + diameters)
  • โœ“ /vehicles/:id (PCD, CB, TPMS, torque)
  • โœ• Fitment widths & offsets
  • โœ• OEM tyre sizes
  • โœ• PCD cross-compatibility
1,000 lookups / calendar month
๐Ÿ”ถ Tyre Dealer
ยฃ99/mo
B2B ยท 1-month rolling
  • โœ“ Everything in Free
  • โœ“ Fitment widths + offset ranges
  • โœ“ OEM tyre sizes per diameter
  • โœ“ Front/rear split for staggered
  • โœ“ PCD cross-compatibility (wobbly bolt)
  • โœ• Compatible-wheel-SKU matches
10,000 lookups / calendar month
๐ŸŸฃ Premium
contact
enterprise ยท custom
  • โœ“ Everything in Tyre Dealer
  • โœ“ /compatible-wheels (live SKU matches)
  • โœ“ Stock + trade pricing
  • โœ“ Forge image generation quota
  • โœ“ Higher quota, lower latency
  • โœ“ SLA + on-prem option
Up to 1M lookups / mo ยท custom

Authentication

Paid tiers identify themselves with an API key. Pass it via the X-AIWT-Key header on every request:

curl -H "X-AIWT-Key: aiwt_xxxxxxxxxxxxxxxxxxxxxxxx" \
  https://api.aiwheeltech.com/api/v1/vehicles/205

Or via standard Authorization header:

curl -H "Authorization: Bearer aiwt_xxxxxxxxxxxxxxxxxxxxxxxx" \
  https://api.aiwheeltech.com/api/v1/vehicles/205

No header โ†’ caller defaults to the free tier. Paid-tier responses include the data your tier covers; lower tiers see _redacted arrays naming the fields they would unlock by upgrading.

Endpoints

GET /api/v1/makes ๐ŸŸข Free

List every make in the database.

{
  "makes": ["Alpine","Aston Martin","Audi","Bentley","BMW","BYD", ...]
}
GET /api/v1/models?make=BMW ๐ŸŸข Free

Distinct model names for a given make.

{
  "make": "BMW",
  "models": ["1 Series","2 Series","3 Series","M3","M4","X5", ...]
}
GET /api/v1/years?make=BMW&model=M3 ๐ŸŸข Free

Years covered by any variant of this make/model.

GET /api/v1/variants?make=BMW&model=M3&year=2022 ๐ŸŸข Free

Variants matching the make/model/year tuple.

GET /api/v1/lookup?make=BMW&model=M3&year=2022 ๐ŸŸข Free โ†’ shell + diameters only ๐Ÿ”ถ Tyre Dealer โ†’ full

One-shot selector lookup. Free tier sees vehicle + diameters; tyre_dealer+ adds fitments, OEM tyres, aliases, PCD cross-compat.

Tyre Dealer response:

{
  "vehicle": { "id": 205, "make": "BMW", "model": "M3", "variant": "M3 G80/G81 Facelift",
               "year_from": 2022, "year_to": 2024, "factory_setup": "staggered",
               "pcd": "5x112", "centre_bore": "66.6", "tpms_type": "direct", ... },
  "diameters": [{"diameter": 18, "setup": "staggered"}, ...],
  "fitments": [{"position": "front", "width": "8.5", "offset_min": 25, "offset_max": 45 }, ...],
  "tyres":    [{"diameter": 19, "position": "front", "tyre_size": "275/35R19", "is_oe": true}, ...],
  "pcd_cross_compatible": [{"pcd": "5x114.3", "wobbly_bolt_spec": "M14x1.25 -2mm shift"}]
}
GET /api/v1/vehicles/:id ๐ŸŸข Free โ†’ shell + diameters ๐Ÿ”ถ Tyre Dealer โ†’ + fitments, tyres, aliases

Full record by vehicle id. Same tier behaviour as /lookup. Includes primary_image_url + primary_thumb_url (Flux-rendered side-profile, 256ร—256 webp thumb).

GET /api/v1/vehicles/:id/compatible-wheels ๐Ÿ”ถ Tyre Dealer

Compatible wheel SKUs for this vehicle โ€” joins fitments to the wheel_skus catalog with PCD adjacency (wobbly-bolt) and centre-bore tolerance. Each match flags requires_wobbly_bolt when fitting across PCD.

Sample match:

{
  "vehicle_id": 205,
  "compatible_pcds": ["5x112","5x114.3"],
  "count": 24,
  "compatible": [
    {
      "sku_id": 5512, "sku_code": "OZ-LEGGERA-19BLK-512",
      "brand": "OZ Racing", "model": "Leggera HLT",
      "pcd": "5x112", "width": "8.5", "diameter": 19, "offset": 32,
      "stock_qty": 4, "retail_price": 489.00, "trade_price": 360.00,
      "for_position": "front", "requires_wobbly_bolt": false
    }, ...
  ]
}
GET /api/v1/wheels ๐ŸŸข Free โ†’ card list (no trade prices) ๐Ÿ”ถ Tyre Dealer โ†’ + trade + supplier units

Paginated catalogue browse. Filters: brand, model, colour, diameter, width, pcd, centre_bore, in_stock, available, min_price, max_price. ?page=1&limit=24 (max 100). ?include_skus=1 expands every SKU.

GET /api/v1/wheels?diameter=19&pcd=5x112&limit=2

{
  "total": 64, "page": 1, "limit": 2, "pages": 32, "tier": "tyre_dealer",
  "products": [
    {
      "id": 4, "brand": "GMP Italia", "model": "Atom", "colour": "Black Polished",
      "image_url": "...", "sku_count": 3,
      "diameters": [19], "pcds": ["5x112"],
      "from_retail": 297, "from_trade": 202.07, "from_cost": 134.71,
      "in_stock_same_day": false, "available_from_supplier": true,
      "same_day_units": 0, "supplier_units": 25
    }, ...
  ]
}
GET /api/v1/wheels/_meta ๐ŸŸข Free

Lookup tables for filter UIs โ€” distinct brands, diameters, pcds.

GET /api/v1/wheels/:id ๐ŸŸข Free โ†’ shell + redacted SKUs ๐Ÿ”ถ Tyre Dealer โ†’ full

Single wheel product + every SKU. Public callers see a shell (brand, model, image, retail) and SKUs with boolean stock flags only. Tyre Dealer+ sees full product record + per-SKU trade/cost prices, same-day vs supplier qty, lead times.

GET /api/v1/tyres ๐ŸŸข Free โ†’ list (no cost / supplier qty) ๐Ÿ”ถ Tyre Dealer โ†’ + cost + supplier units

Paginated tyre catalogue (each row IS a SKU โ€” tyres are flat). Filters: brand, model, width, profile, diameter, season, runflat, in_stock, available, min_price, max_price.

GET /api/v1/tyres/_meta ๐ŸŸข Free

Distinct brands, diameters, seasons.

GET /api/v1/tyres/:id ๐ŸŸข Free โ†’ shell ๐Ÿ”ถ Tyre Dealer โ†’ + cost + supplier qty

Single tyre. Public sees the retail-facing view (no cost, no supplier SKU, no landed-cost breakdown).

GET /api/v1/health ๐ŸŸข Free

Liveness probe. Returns DB time + version.

// drop-in widget

aiwt-stock.js

Don't want to write the frontend? Drop two tags onto any HTML page and get a filterable grid backed by your tier. Works on WordPress, Shopify, plain static. Auto-mounts every [data-aiwt-stock] element on the page.

<link rel="stylesheet" href="https://aiwheeltech.com/aiwt-stock.css">
<div data-aiwt-stock data-kind="wheels"
     data-key="aiwt_xxxxxxxxxxxxxxxxxxxxxxxx"
     data-filters="brand,diameter,pcd" data-page-size="24"></div>
<script src="https://aiwheeltech.com/aiwt-stock.js" defer></script>

See it live on the playground โ€” paste your key and watch the same widget that powers Manchester Alloys and International Alloys.

Errors

statuserror codemeaning
401auth_requiredThis endpoint needs an API key. Pass X-AIWT-Key.
403tier_insufficientYour tenant's tier doesn't cover this endpoint. Response includes required_tier.
404no vehicle matched / not foundThe id/selector tuple resolved nothing.
429quota_exceededTenant exceeded monthly lookups. Resets on the 1st of next month.
503โ€”Database unreachable. We log + alert on these.

CORS & caching

Access-Control-Allow-Origin: * on all /api/v1/* responses โ€” browser-side use is fine. Cache-Control: public, max-age=60 on read responses.

For high-volume clients we recommend caching at your edge โ€” fitment data is approximately stable per vehicle.

Ready to integrate?

Drop a line โ€” we'll send you a key, no card, no friction.

Email [email protected]