MENU navbar-image

🚗 AutoHub API

AutoHub vehicle API for specs, values, recalls, and dealers.

Data is normalized from the EPA (fueleconomy.gov), NHTSA, KBB, and other vehicle sources. Make, model, and trims come from the EPA. Their ids are the EPA names, and the trim vehicle_id is the EPA vehicle id used by recalls. Car value and depreciation take the KBB vehicle_id returned by /vin.

Vehicle Discovery & Lookup

Search and autocomplete vehicle makes and models by year and make with fast, real-time results.

GET /v1/autocomplete

requires authentication

Vehicle make & model autocomplete.

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/autocomplete'
params = {
  'search': 'Tundra',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/autocomplete';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'search' => 'Tundra',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/autocomplete"
);

const params = {
    "search": "Tundra",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/autocomplete?search=Tundra" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
    "meta": {
      "version": "v1.0",
      "status": 200,
      "copywrite": "https://steadyapi.com",
      "search": "tesla",
      "total": 10
    },
    "body": [
      {
        "type": "model",
        "make": "TESLA",
        "model": "TESMODS",
        "name": "Tesla Model S"
      },
      {
        "type": "model",
        "make": "TESLA",
        "model": "TESMODX",
        "name": "Tesla Model X"
      },
      { ... }
    ]
  }
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/autocomplete

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
search required string

Search term. Example: Tundra

GET /v1/make

requires authentication

Search vehicle make by year.

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/make'
params = {
  'year': '2025',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/make';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'year' => '2025',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/make"
);

const params = {
    "year": "2025",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/make?year=2025" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "year": "2025",
    "total": 48
  },
  "body": [
    {
      "makeId": "Acura",
      "name": "Acura"
    },
    {
      "makeId": "Alfa Romeo",
      "name": "Alfa Romeo"
    },
    { ... }
  ]
}

 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/make

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
year required string

Vehicle model year. Example: 2025

GET /v1/model

requires authentication

Search vehicle model by year and make.

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/model'
params = {
  'year': '2025',
  'makeId': 'Mazda',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/model';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'year' => '2025',
            'makeId' => 'Mazda',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/model"
);

const params = {
    "year": "2025",
    "makeId": "Mazda",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/model?year=2025&makeId=Mazda" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "year": "2025",
    "makeId": "Mazda",
    "total": 12
  },
  "body": [
    {
      "modelId": "3 4-Door 2WD",
      "name": "3 4-Door 2WD"
    },
    {
      "modelId": "3 4-Door 4WD",
      "name": "3 4-Door 4WD"
    },
    { ... }
  ]
}

 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/model

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
year required string

Vehicle model year. Example: 2025

makeId required string

makeId from /make (the make name). Example: Mazda

GET /v1/trims

requires authentication

Get vehicle trims by year, make ID, and model ID

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/trims'
params = {
  'year': '2025',
  'makeId': 'Mazda',
  'modelId': 'CX-5 4WD',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/trims';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'year' => '2025',
            'makeId' => 'Mazda',
            'modelId' => 'CX-5 4WD',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/trims"
);

const params = {
    "year": "2025",
    "makeId": "Mazda",
    "modelId": "CX-5 4WD",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/trims?year=2025&makeId=Mazda&modelId=CX-5+4WD" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
    "meta": {
        "version": "v1.0",
        "status": 200,
        "copywrite": "https://steadyapi.com",
        "year": "2025",
        "makeId": "Mazda",
        "modelId": "CX-5 4WD",
        "total": 3
    },
    "body": [
        {
            "name": "Auto (S6), 4 cyl, 2.5 L, SIDI",
            "vehicle_id": "48537"
        },
        {
            "name": "Auto (S6), 4 cyl, 2.5 L, SIDI; with cylinder deactivation",
            "vehicle_id": "48538"
        },
        {
            "name": "Auto (S6), 4 cyl, 2.5 L, Turbo, SIDI",
            "vehicle_id": "48539"
        }
    ]
}
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/trims

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
year required string

Vehicle model year. Example: 2025

makeId required string

makeId from /make. Example: Mazda

modelId required string

modelId from /model. Example: CX-5 4WD

GET /v1/vin

requires authentication

Search vehicle by VIN number

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/vin'
params = {
  'vin': 'jm3kkbha5r1166850',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/vin';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'vin' => 'jm3kkbha5r1166850',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/vin"
);

const params = {
    "vin": "jm3kkbha5r1166850",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/vin?vin=jm3kkbha5r1166850" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
    "meta": {
        "version": "v1.0",
        "status": 200,
        "copywrite": "https://steadyapi.com",
        "vin": "JM3KKBHA5R1166850",
        "has_results": true
    },
    "body": {
        "using_cads": true,
        "vehicle_id": 466424,
        "year": "2024",
        "make": "MAZDA",
        "model": "CX-90",
        "vehicle_option_ids": [
            11519922,
            11519914
        ],
        "additional_option_ids": [
            11519951,
            11519989,
            11519992
        ],
        "trim_name": "Preferred Sport Utility 4D",
        "body_style": "SUV",
        "engine": "4-Cyl, e-SKYACTIV, Hybrid, 2.5 Liter",
        "transmission": "Automatic, 8-Spd e-SKYACTIV-Drive w/Manual Mode",
        "drivetrain": "AWD"
    }
}
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/vin

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
vin required string

Vehicle Identification Number Example: jm3kkbha5r1166850

Vehicle Details & Analytics

Retrieve detailed vehicle information including make, model, year, and comprehensive specifications such as performance, fuel economy, dimensions, and features.

GET /v1/details

requires authentication

Retrieve full vehicle details (name, model, trims, specs, features, etc.)

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/details'
params = {
  'year': '2025',
  'make': 'Chevrolet',
  'model': 'Silverado EV',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/details';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'year' => '2025',
            'make' => 'Chevrolet',
            'model' => 'Silverado EV',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/details"
);

const params = {
    "year": "2025",
    "make": "Chevrolet",
    "model": "Silverado EV",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/details?year=2025&make=Chevrolet&model=Silverado+EV" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "year": "2023",
    "make": "mazda",
    "model": "cx-5",
    "total_trims": 8
  },
  "body": [
    {
      "vehicleId": 462025,
      "displayName": "2.5 S Sport Utility 4D",
      "combinedMpg": "26 MPG",
      "maxSeatingCapacity": 5,
      "horsepower": "187 @ 6000 RPM",
      "standardEngine": "4-Cyl, SKYACTIV-G, 2.5 Liter",
      "zeroToSixty": 8.9,
      "estimatedElectricRange": 0,
      "modelName": "CX-5",
      "modelMarketName": "CX-5",
      "isEv": false,
      "curbWeight": 3728,
      "batteryCapacity": 0,
      "topSpeed": 128,
      "chargeTime": 0,
      "torque": 186,
      "towingCapacity": 2000,
      "driveTrain": "AWD",
      "trunkOrCargoCapacity": 30,
      "evRange": null,
      "epaCity": 24,
      "epaHwy": 30,
      "epaMpgeCity": 0,
      "epaMpgeHwy": null,
      "epaCombined": 26,
      "epaMpgeCombined": 0,
      "fppPrice": 20200,
      "bodyStyle": "SUV"
    },
    { ... }
  ]
}
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/details

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
year required string

Example: 2025

make required string

Example: Chevrolet

model required string

Example: Silverado EV

bodystyle optional string

optional

zipcode optional string

optional

GET /v1/car-value

requires authentication

Retrieve vehicle value and pricing data including trade-in or private-party values

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/car-value'
params = {
  'vehicle_id': '467716',
  'mileage': '50000',
  'zipcode': '45240',
  'priceType': 'private-party',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/car-value';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'vehicle_id' => '467716',
            'mileage' => '50000',
            'zipcode' => '45240',
            'priceType' => 'private-party',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/car-value"
);

const params = {
    "vehicle_id": "467716",
    "mileage": "50000",
    "zipcode": "45240",
    "priceType": "private-party",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/car-value?vehicle_id=467716&mileage=50000&zipcode=45240&priceType=private-party" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
    "meta": {
        "version": "v1.0",
        "status": 200,
        "copywrite": "https://steadyapi.com",
        "vehicle_id": "467716",
        "zipcode": "73101",
        "price_type": "private-party",
        "mileage": "5000",
        "generated_at": "2026-06-16 02:15:59"
    },
    "body": {
        "excellent": {
            "value": 26880,
            "low": 24380,
            "high": 29380
        },
        "verygood": {
            "value": 26280,
            "low": 23780,
            "high": 28780
        },
        "good": {
            "value": 25680,
            "low": 23280,
            "high": 27980
        },
        "fair": {
            "value": 23980,
            "low": 21780,
            "high": 26180
        }
    }
}
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/car-value

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
vehicle_id required string

KBB vehicle_id from /vin. Example: 467716

mileage required string

Example: 50000

zipcode optional string

optional Example: 45240

priceType optional string

optional Options:

  • trade-in: Returns single trade-in value with high/low range (default)
  • private-party: Returns values for all condition levels (Excellent, Very Good, Good, Fair) Example: private-party

GET /v1/depreciation

requires authentication

Retrieve vehicle depreciation data including historical and future values

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/depreciation'
params = {
  'vehicle_id': '475635',
  'mileage': '50000',
  'zipcode': '73101',
  'condition': 'verygood',
  'annualMileage': '12000',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/depreciation';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'vehicle_id' => '475635',
            'mileage' => '50000',
            'zipcode' => '73101',
            'condition' => 'verygood',
            'annualMileage' => '12000',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/depreciation"
);

const params = {
    "vehicle_id": "475635",
    "mileage": "50000",
    "zipcode": "73101",
    "condition": "verygood",
    "annualMileage": "12000",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/depreciation?vehicle_id=475635&mileage=50000&zipcode=73101&condition=verygood&annualMileage=12000" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "zipcode": "73101",
    "condition": "verygood",
    "mileage": 50000,
    "annual_mileage": 12000,
    "generated_at": "2026-06-16 02:30:47"
  },
  "body": {
    "summary": {
      "total_depreciation": 5810,
      "depreciation_percentage": 23.52,
      "total_years": 5
    },
    "depreciation_data": [
      {
        "year": 2024,
        "mileage": 26000,
        "trade_in_value": 24700,
        "private_party_value": 27690,
        "is_projected": false
      },
      {
        "year": 2025,
        "mileage": 38000,
        "trade_in_value": 23250,
        "private_party_value": 26250,
        "is_projected": false
      },
      {
        "year": 2026,
        "mileage": 50000,
        "trade_in_value": 21800,
        "private_party_value": 24800,
        "is_projected": false
      },
      { ... }
    ]
  }
}
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/depreciation

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
vehicle_id required string

KBB vehicle_id from /vin. Example: 475635

mileage required integer

Example: 50000

zipcode optional string

optional Example: 73101

condition optional string

optional Options: excellent, verygood, good, fair, poor. Example: verygood

annualMileage optional integer

optional Example: 12000

GET /v1/recalls

requires authentication

Retrieve vehicle recall information including safety notices, components affected, and remedies

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/recalls'
params = {
  'vehicle_id': '43515',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/recalls';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'vehicle_id' => '43515',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/recalls"
);

const params = {
    "vehicle_id": "43515",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/recalls?vehicle_id=43515" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
    "meta": {
        "version": "v1.0",
        "status": 200,
        "copywrite": "https://steadyapi.com",
        "vehicle_id": "43515",
        "year": "2021",
        "make": "Mercedes-Benz",
        "model": "C300",
        "source": "nhtsa",
        "total_recalls": 2
    },
    "body": {
        "recalls": [
            {
                "type": "Recall",
                "summary": "Mercedes-Benz USA, LLC (MBUSA) is recalling certain 2021 C300 Cabriolet, C43 AMG Cabriolet, C63 AMG Cabriolet, C63 AMG S Cabriolet, E450 Cabriolet, and E53 AMG Cabriolet vehicles.  The rear headrests may be incorrectly mounted to the seatbacks.",
                "component": "SEATS:MID/REAR ASSEMBLY:HEAD RESTRAINT",
                "consequence": "Incorrectly mounted headrests could move or detach from the seat during a crash, increasing the risk of injury.",
                "remedy": "Dealers will inspect the rear seatback guide bushings and replace them if necessary, free of charge.  Owner notification letters were mailed July 16, 2021.  Owners may contact MBUSA customer service at 1-800-367-6372.  MBUSA's number for this recall is 2021060010.",
                "report_date": "2021-05-28",
                "nhtsa_campaign_id": "21V406000",
                "manufacturer_recall_no": null,
                "potential_affected_units": null,
                "manufacture_dates": null
            },
            {
                "type": "Recall",
                "summary": "Mercedes-Benz USA, LLC (MBUSA) is recalling certain 2021 C-Class, E-Class, E-Class Coupe and Convertible, GLC, CLS, AMG GT 4-door Coupe and G-Class vehicles.  Please refer to MBUSA's recall report for specific vehicle model details.  A faulty electrical contact within the seat position switch may prevent the driver and passenger air bags and seat belt force limiters from properly activating during a crash.",
                "component": "SEATS",
                "consequence": "Air bags and seat belts that do not perform properly in a crash can increase the risk of injury.",
                "remedy": "MBUSA will notify owners, and dealers will replace the seat position switches, free of charge.  Owner letters were mailed May 21, 2021.  Owners may contact MBUSA customer service at 1-800-367-6372.  MBUSA's number for this recall is 2021040016.",
                "report_date": "2021-04-01",
                "nhtsa_campaign_id": "21V230000",
                "manufacturer_recall_no": null,
                "potential_affected_units": null,
                "manufacture_dates": null
            }
        ]
    }
}
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/recalls

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
vehicle_id optional string

optional vehicle_id from /trims. Example: 43515

year optional string

optional Model year. Required with make and model when no id or VIN is sent.

make optional string

optional

model optional string

optional

vin optional string

optional 17-character VIN. Decoded through NHTSA vPIC, then matched to recalls.

Vehicle Commerce & Availability

Find dealers near a ZIP code for one make.

GET /v1/dealers

requires authentication

Search for car dealers by location and vehicle criteria

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/dealers'
params = {
  'zipcode': '60601',
  'make': 'Mazda',
}
headers = {
  'Authorization': 'Bearer {YOUR_AUTH_KEY}'
}

response = requests.request('GET', url, headers=headers, params=params)
response.json()
$client = new \GuzzleHttp\Client();
$url = 'https://api.steadyapi.com/v1/vehicles/dealers';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'zipcode' => '60601',
            'make' => 'Mazda',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/dealers"
);

const params = {
    "zipcode": "60601",
    "make": "Mazda",
};
Object.keys(params)
    .forEach(key => url.searchParams.append(key, params[key]));

const headers = {
    "Authorization": "Bearer {YOUR_AUTH_KEY}",
    "Accept": "application/json",
};

fetch(url, {
    method: "GET",
    headers,
}).then(response => response.json());
curl --request GET \
    --get "https://api.steadyapi.com/v1/vehicles/dealers?zipcode=60601&make=Mazda" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "zipcode": "60601",
    "make": "mazda",
    "total_dealers": 11
  },
  "body": [
    {
      "StorefrontWebURL": "https://www.mazdaofchicagoland.com",
      "FranchisePhone": "224-307-8496",
      "UsedCarFranchiseId": 0,
      "ProfileId": 8001,
      "MakeId": 30,
      "FranchiseId": 7771155,
      "Distance": 11,
      "FranchiseZip": "60202",
      "FranchiseState": "IL",
      "FranchiseCity": "Evanston",
      "FranchiseAddress1": "1015 Chicago Avenue",
      "FranchiseName": "The Autobarn Mazda of Evanston",
      "VendorDealerId": "63784869",
      "FranchiseAndMake": "The Autobarn Mazda of Evanston",
      "PartnerFranchiseId": "63784869",
      "MakeName": "MAZDA",
      "PrimaryPhoto": "https://assets.cai-media-management.com/dealership/373d900a-7d32-4695-a2bf-2913b7387491.jpg"
    },
    { ... }
  ]
}
 

Example response (401, Unauthenticated):


{
    "message": "Unauthenticated."
}
 

Example response (404, Not Found):


{
    "success": false,
    "message": "Resource Not Found"
}
 

Example response (422, Error Validations):


{
    "message": "The ticker field is required.",
    "errors": {
        "ticker": [
            "The ticker field is required."
        ]
    }
}
 

Request      

GET v1/vehicles/dealers

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
zipcode required string

Zip code for search location Example: 60601

make required string

Vehicle make Example: Mazda