API

Aerpro Developer Tools

Welcome to the Aerpro API!

Aerpro's vehicle fitment data, showing which Aerpro products suit which vehicles, is available two ways: a JSON API that any program or AI assistant can call, and a vehicle selector you can embed on a website. Both are public and free, need no key or login, and carry the same current data as aerpro.com.

Put it on your site

Drop in the vehicle selector and let your visitors find what fits their car. No server-side code. Recommended for most websites. Automatically handles variants.

Integration guide

Build your own

Call the endpoints directly for full control over how the data is used and presented. No authentication required.

Use the API
JSON API

Look Up a Fitment With the API

These endpoints are the current, supported Aerpro API. Each call is a plain HTTPS GET that returns JSON. No JavaScript, plugin or browser is needed, and no key or authentication. The full reference is the OpenAPI specification.

1. Find the vehicle

Search with the make and model, at least three characters:

GET https://aerpro.com/api/search/vehicles?search_term=ford+ranger
[
  { "id": "18501", "title": "Ford Ranger 2006-2011 PJ, PK", "url": "…" },
  { "id": "32065", "title": "Ford Ranger 2012-2015 PX", "url": "…" },
  …
]

The title carries the years and chassis codes. Several generations of one model take different parts, so match the customer's year before going on, and take that result's id.

2. List what fits

GET https://aerpro.com/api/v2/linked/vehicle/18501
{ "products": [ "FP7500", "FP9072", "APP072", "CT10FD07", … ] }

The SKUs of every product that suits the vehicle. A vehicle with nothing linked returns an error string instead of products; an unknown id is a 404.

3. Check the dash, if the vehicle has more than one

GET https://aerpro.com/api/v2/vehicle/18501

Some vehicles were sold with more than one factory dash, and a part that fits one may not fit another. The list in step 2 covers every dash. This call returns the vehicle with has_variants and a variants array, each variant with its title, dash image and the products that fit it. Where there is more than one, ask which dash the customer has and answer from that variant's products.

4. Get the detail for a product

GET https://aerpro.com/api/v2/product/FP7500
{ "sku": "FP7500", "title": "Facia To Suit Ford, Mazda Champagne",
  "categories": [ "Single / Double DIN Facias" ], "available": true, … }

Other questions

When you pass a fitment on, quote the vehicle title and the SKUs you looked up, so the customer can check they match their vehicle. A wrong fitment means a returned product.

Integration Guide

Implementation Steps

Follow these four steps to integrate the vehicle selector on your website. The plugin has no dependencies and provides a callback-based interface for handling vehicle data. You can fully theme the selectors and interface, the output is just data, so you can format that how you need.

  • Include the Aerpro plugin script tag
  • Create a container element for the widget
  • Start the selector with your callback
  • The attribution link must remain visible
Code Examples

Step-by-Step Integration

No dependencies. One script tag is the whole install. No library, no build step. If your page already uses jQuery, the legacy $('#el').aerproVehicleSelector(callback) form works too, and existing integrations do not need to change.

Step 1: Load the Aerpro Plugin

<script src="https://aerpro.com/plugin.js"></script>

If you would rather keep it off your critical rendering path, add defer, but then start the selector from a DOMContentLoaded listener rather than inline, because a deferred script has not run yet while the page is still being parsed.

Step 2: Create a Container Element

<div id="aerpro-selector-here"></div>

Step 3: Start the Selector

<script>
  Aerpro.vehicleSelector('#aerpro-selector-here', function (data) {
    // data.vehicle contains: make, model, year, picture, products, has_variants, variants
    // Optional: data.vehicle.variant, the dash the visitor chose, when there was a choice
    console.log('Vehicle:', data.vehicle.make, data.vehicle.model);
    console.log('Products:', data.vehicle.products.length);
    // Make some magic!
  });
</script>

The first argument takes a CSS selector or an element. Your callback runs every time a visitor picks a vehicle, or variant if one is required.

Step 4: Handle the Cases With No Answer

Your callback runs when we have a vehicle to give you. When we do not, the plugin fires an aerpro-error event instead. Listen for it, or those selections will leave your panel showing whatever it showed last.

document.addEventListener('aerpro-error', function (event) {
  var info = event.detail;

  if (info.noVehicle) {
    // We have no fitment data for that vehicle. That is an answer, not a
    // failure, and retrying will not change it.
    showMessage('Sorry, we have no fitment information for that vehicle.');
  }
  else if (info.rateLimited) {
    // Too many requests. info.retryAfter is seconds, when we send one.
    showMessage('Please wait a moment and try again.');
  }
  else if (info.challenged) {
    // Our edge could not confirm the browser. Only the visitor can clear this,
    // by opening aerpro.com directly and completing the check there.
    showMessage(info.message);
  }
  else {
    // A problem reaching us. Worth a retry.
    showMessage('Could not reach Aerpro. Please try again.');
  }
});

info.status carries the HTTP status and info.message our explanation of it. Every field on an aerpro-error:

Field Meaning
message What went wrong, in words.
status The HTTP status, or 0 when the request never got an answer.
noVehicle We have no fitment for that vehicle. An answer, not a failure: retrying will not change it.
rateLimited Too many requests. retryAfter is the number of seconds to wait, when we send one.
challenged The browser could not be confirmed. Only the visitor can clear it, by opening aerpro.com directly.
stage 'makes' when the vehicle list itself failed to load, so there is no selector to use.

The matching aerpro-status event marks the normal milestones, named by event.detail.message:

Message When
plugin-ready The list of makes has loaded.
make-selected A make was chosen; models counts its models.
model-selected A model was chosen.
api-ready Make and model are both chosen, and the vehicle is being fetched.
variants-available The vehicle has more than one dash; the variant step is showing.
variant-selected A dash was chosen; products counts what fits it.
variant-cleared "Show all products" was chosen instead of a specific dash.
api-success The vehicle was handed to your callback; data is the same payload.

Using the jQuery form? Keep it. $(document).on('aerpro-error', function (event, info) { … }) receives the same object as the second argument.

Vehicles With More Than One Dash

Some vehicles were sold with different factory dashes, and a part that fits one may not fit another. Only for those vehicles, the selector adds a third step showing the dash photos, so your visitor can point at the one in front of them. A vehicle with one dash has no third step. Your callback runs once they have chosen, with the products narrowed to their variant and data.vehicle.variant naming it. It never runs before they have answered. The step stays on the page, so changing their mind runs your callback again with the new answer, exactly as changing the model does.

A visitor who cannot identify their dash is never stuck: under the photos, a "Show all products for this vehicle" button carries every product the vehicle takes, and in the dropdown form "All variants" does the same, with its own product count.

You need write no variant code. If you would rather render the step differently:

// A plain dropdown instead of the dash photos.
Aerpro.vehicleSelector('#aerpro-selector-here', callback, { variants: 'select' });

// Skip the step; hand over every product the vehicle carries.
Aerpro.vehicleSelector('#aerpro-selector-here', callback, { variants: 'off' });

Styling the Selector

Every part carries an id or class you can target. The variant step's layout ships as a small stylesheet, #aerpro-selector-styles, rather than inline styles, so your own CSS overrides it without !important. Its buttons and select also carry Bootstrap's btn and form-select classes, so on a Bootstrap site they match your own controls.

Hook What it is
#aerpro-selector The whole selector.
#aerpro-selector-title The introductory sentence.
#aerpro-selector-widget The row of controls.
#aerpro-select-make, #select-make The make wrapper, and its <select>.
#aerpro-make-default The "Makes" placeholder option.
#aerpro-select-model, #select-model The model wrapper, and its <select>.
.attribution The "Powered by Aerpro" link. It must stay visible.
.aerpro-selector-notice The message shown when the vehicle list cannot load.
#aerpro-list-variants The variant step. Empty unless the vehicle has more than one dash.
.variant-prompt The question above the dashes.
.variant-wrapper One card per dash; .variant-chosen is added to the one picked.
.variant-image The dash photo. Clicking it chooses that dash.
.variant-name, .variant-count, .variant-notes The dash's name, how many products fit it, and its notes.
.variant-selection The "Use this Variant" button.
.variant-actions, .variant-escape The row holding the "Show all products" button, and the button.
#select-variant The dropdown, in variants: 'select' mode only.
Try It Out

Live Demo

Select a vehicle below to see the plugin in action:

Going Further

A Worked Example

The same endpoints and the same callback, with the payload put to work instead of printed. Pick a vehicle and each fitting part flies from the car into the basket.

Choose a make and model to see what fits.

Fits your vehicle

    Nothing yet.

    Built with Aerpro.vehicleSelector() and about a hundred lines of plain JavaScript, with no framework and no build step. Read it in fitting-guide.js via your browser's developer tools; it is a worked example, meant to be copied.

    API Explorer

    Try Every Endpoint

    Every endpoint, live. Open one, fill in its parameters and press Execute to see the real response from aerpro.com. All of them are public and read-only, with no key and no authentication, and the vehicle selector is built on these same endpoints.

    Aerpro is a wholesaler and publishes no pricing. Purchase enquiries must go to a stockist. Wholesale enquiries require a new account, see tdj.com.au.

    Machine-readable: OpenAPI specification · API catalogue · llms.txt

    All code and data are the property of TDJ Australia Pty Ltd. You may call the API on demand to answer a person's question, including through an AI assistant acting for them, and show them the result. You may not bulk-download, mirror, index or resell the catalogue. Excessive use will result in rate-limiting.