MENU navbar-image

🚗 AutoHub API

Access structured vehicle data including specifications, trims, reviews, rankings, market listings, depreciation values, and real-time inventory across multiple sources. Unified automotive intelligence API with normalized data from KBB, Carmax, and trusted providers for car marketplaces, dealer tools, and automotive applications.

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": "investing",
    "total": 30
  },
  "body": {
    "users": [
      {
        "id": 988955288,
        "id_str": "988955288",
        "verified": false,
        "is_dm_able": false,
        "is_secret_dm_able": false,
        "is_blocked": false,
        "can_media_tag": false,
        "name": "Investing.com",
        "screen_name": "Investingcom",
        "profile_image_url": "http://pbs.twimg.com/profile_images/1110172882368368640/pUSI1yPZ_normal.png",
        "profile_image_url_https": "https://pbs.twimg.com/profile_images/1110172882368368640/pUSI1yPZ_normal.png",
        "location": "Global",
        "is_protected": false,
        "rounded_score": 109217,
        "social_proof": 0,
        "connecting_user_count": 0,
        "connecting_user_ids": [],
        "social_proofs_ordered": [],
        "social_context": {
          "following": false,
          "followed_by": false
        },
        "tokens": [
          {
            "token": "investingcom"
          },
          {
            "token": "@investingcom"
          },
          {
            "token": "investing.com"
          }
        ],
        "inline": false
      },
      { ... }
    ],
    "topics": [
      {
        "topic": "investing quotes",
        "rounded_score": 600,
        "tokens": [
          {
            "token": "investing"
          },
          {
            "token": "quotes"
          }
        ],
        "inline": false
      },
      { ... }
    ],
    "events": [],
    "lists": [],
    "oneclick": [],
    "hashtags": []
  }
}
 

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": "2023",
    "total": 69
  },
  "body": [
    {
      "modelId": 2,
      "name": "Acura"
    },
    {
      "modelId": 3,
      "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 year. Example: 2025

GET /v1/model

requires authentication

Search vehicle model by year, and model.

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/model'
params = {
  'year': '2021',
  'makeId': '9',
}
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' => '2021',
            'makeId' => '9',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/model"
);

const params = {
    "year": "2021",
    "makeId": "9",
};
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=2021&makeId=9" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "year": "2023",
    "makeId": "9",
    "total": 25
  },
  "body": [
    {
      "modelId": "61",
      "name": "Blazer"
    },
    {
      "modelId": "40281",
      "name": "Bolt EUV"
    },
    { ... }
  ]
}
 

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 year. Example: 2021

makeId required string

Vehicle make. Example: 9

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': '2011',
  'makeId': '9',
  'modelId': '774',
}
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' => '2011',
            'makeId' => '9',
            'modelId' => '774',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/trims"
);

const params = {
    "year": "2011",
    "makeId": "9",
    "modelId": "774",
};
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=2011&makeId=9&modelId=774" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "year": "2011",
    "makeId": "9",
    "modelId": "774",
    "total": 7
  },
  "body": [
    {
      "name": "LS Pickup 4D 5 3/4 ft",
      "vehicle_id": "358402"
    },
    {
      "name": "XFE Pickup 4D 5 3/4 ft",
      "vehicle_id": "358405"
    },
    { ... }
  ]
}
 

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

Year of the vehicle Example: 2011

makeId required string

Make ID Example: 9

modelId required string

Model ID Example: 774

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,
        "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",
    "query": "investing",
    "product": "Top",
    "next_cursor": "DAACCgACG6ZQgC9AJxAKAAMbplCALz_Y8AgABAAAAAILAAUAAADcRW1QQzZ3QUFBZlEvZ0dKTjB2R3AvQUFBQUJJYnBNR21PUmFnb0J1Z3pLdmFWbEE3RzZTMHFoMlh3TlFibTIza1BkZlIwaHVtUWZJSm03RTZHNTVXS2liV1VHVWJuZ0ZKRmhZeDh3ODhqMzZCbHJBQUc2SmlTc0NXWVpBYm9VZmVEaGZBZWdzZUhmc0oxRUFBRzVwR2xMZWE0RjRicE9yVUF0dFFjQnVpRDVvSzFyRUFHNkprVTduV1lIZ2JwZFFWb1pvaE1RdFdiek5MMWhBQUc2RHVTWkxYWURVPQgABgAAAAAIAAcAAAAADAAICgABCx4d-wnUQAAAAAA",
    "count": 18
  },
  "body": [
    {
      "__typename": "Tweet",
      "rest_id": "1990951529319219322",
      "core": {
        "user_results": {
          "result": {
            "__typename": "User",
            "id": "VXNlcjo2MTU1ODI4MQ==",
            "rest_id": "61558281",
            "affiliates_highlighted_label": [],
            "avatar": {
              "image_url": "https://pbs.twimg.com/profile_images/1758167079843172352/I87PB0PH_normal.jpg"
            },
            "core": {
              "created_at": "Thu Jul 30 18:20:35 +0000 2009",
              "name": "Brian Feroldi",
              "screen_name": "BrianFeroldi"
            },
            "dm_permissions": {
              "can_dm": true
            },
            "follow_request_sent": false,
            "has_graduated_access": true,
            "is_blue_verified": true,
            "legacy": {
              "default_profile": true,
              "default_profile_image": false,
              "description": "🔎 I Teach Investors How To Analyze Businesses | Author & Financial Educator | 20+ Years Investing Experience | Free Investing eBook (Link) ⬇️",
              "entities": {
                "description": {
                  "urls": []
                },
                "url": {
                  "urls": [
                    {
                      "display_url": "longtermmindset.co/investing",
                      "expanded_url": "https://longtermmindset.co/investing",
                      "url": "https://t.co/6rRnW1rwH7",
                      "indices": [0, 23]
                    }
                  ]
                }
              },
              "fast_followers_count": 0,
              "favourites_count": 30009,
              "followers_count": 635641,
              "friends_count": 507,
              "has_custom_timelines": true,
              "is_translator": false,
              "listed_count": 12048,
              "media_count": 7204,
              "normal_followers_count": 635641,
              "pinned_tweet_ids_str": [
                "1817714336611144138"
              ],
              "possibly_sensitive": false,
              "profile_banner_url": "https://pbs.twimg.com/profile_banners/61558281/1744628915",
              "profile_interstitial_type": "",
              "statuses_count": 32974,
              "translator_type": "none",
              "url": "https://t.co/6rRnW1rwH7",
              "want_retweets": false,
              "withheld_in_countries": []
            },
            "location": {
              "location": "Free Investing 📗 ➜"
            },
            "media_permissions": {
              "can_media_tag": false
            },
            "parody_commentary_fan_label": "None",
            "profile_image_shape": "Circle",
            "professional": {
              "rest_id": "1615842396897525767",
              "professional_type": "Creator",
              "category": []
            },
            "profile_bio": {
              "description": "🔎 I Teach Investors How To Analyze Businesses | Author & Financial Educator | 20+ Years Investing Experience | Free Investing eBook (Link) ⬇️"
            },
            "privacy": {
              "protected": false
            },
            "relationship_perspectives": {
              "following": false
            },
            "tipjar_settings": {
              "is_enabled": true,
              "venmo_handle": "brian-feroldi"
            },
            "super_follow_eligible": true,
            "verification": {
              "verified": false
            },
            "profile_description_language": "en"
          }
        }
      },
      "unmention_data": [],
      "edit_control": {
        "edit_tweet_ids": [
          "1990951529319219322"
        ],
        "editable_until_msecs": "1763518409000",
        "is_edit_eligible": false,
        "edits_remaining": "5"
      },
      "is_translatable": false,
      "views": {
        "count": "63258",
        "state": "EnabledWithCount"
      },
      "source": "\u003Ca href=\"https://hypefury.com\" rel=\"nofollow\"\u003EHypefury\u003C/a\u003E",
      "award_eligible": false,
      "granted_awards": [],
      "grok_translated_post_with_availability": {
        "is_available": false
      },
      "grok_analysis_button": true,
      "legacy": {
        "bookmark_count": 666,
        "bookmarked": false,
        "created_at": "Wed Nov 19 01:13:29 +0000 2025",
        "conversation_id_str": "1990951529319219322",
        "display_text_range": [0, 24],
        "entities": {
          "hashtags": [],
          "media": [
            { ... }
          ],
          "symbols": [],
          "timestamps": [],
          "urls": [],
          "user_mentions": []
        },
        "extended_entities": {
          "media": [
            { ... }
          ]
        },
        "favorite_count": 790,
        "favorited": false,
        "full_text": "The Best Investing Tools https://t.co/aBS6yTmggF",
        "is_quote_status": false,
        "lang": "en",
        "possibly_sensitive": false,
        "possibly_sensitive_editable": true,
        "quote_count": 3,
        "reply_count": 15,
        "retweet_count": 173,
        "retweeted": false,
        "user_id_str": "61558281",
        "id_str": "1990951529319219322"
      }
    },
    { ... }
  ]
}
 

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 = {
  'vehicleId': '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' => [
            'vehicleId' => '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 = {
    "vehicleId": "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?vehicleId=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
vehicleId required string

Can be found in the /trims endpoint 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/reviews

requires authentication

Retrieve consumer reviews for a specific vehicle

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/reviews'
params = {
  'year': '2024',
  'make': 'mazda',
  'model': 'cx-5',
  'page': '1',
  'perPage': '6',
}
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/reviews';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'year' => '2024',
            'make' => 'mazda',
            'model' => 'cx-5',
            'page' => '1',
            'perPage' => '6',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/reviews"
);

const params = {
    "year": "2024",
    "make": "mazda",
    "model": "cx-5",
    "page": "1",
    "perPage": "6",
};
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/reviews?year=2024&make=mazda&model=cx-5&page=1&perPage=6" \
    --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_reviews": 35,
    "total_pages": 4,
    "page": "2",
    "per_page": "10",
    "search_terms": [
      "safe"
    ]
  },
  "body": [
    {
      "id": 203986087,
      "nickname": "Bermo",
      "nickname_display": "Bermo",
      "location": null,
      "anonymous": false,
      "year": 2022,
      "model": "CX-5",
      "make": "MAZDA",
      "vehicle_id": 0,
      "title": "Mazda still builds real cars",
      "review_text": "While they try to ram electric cars down our throats, it’s gratifying to know that there is still a company that builds a real car. This car is amazing and the tech is fantastic. I ordered the NAV chip from Amazon. Don’t. A simple usb cable allows you to project your phone on the 10.4” display.\nI got the select version which is just above the base. I got leather seats, AWD, blind spot monitoring and cross traffic warning, adaptive cruise control, lane keep assist, heated seats, dual climate controls up front and leather wrapped steered no wheel and shifter all standard. \nThe styling is excellent, the interior reminds me of an Acura or a Lexus, and the car is definitely a drivers car. It handles beautifully and I am one of those people that hate CVT transmissions, so I love that Mazda gives you a REAL 6 speed automatic with sport mode. I got the non-turbo version because with the turbo, I wouldn’t have the self discipline not to thrash it every chance I got…and would probably start accumulating tickets as a result. Besides, I plan on having this car for a long time and turbochargers generally shorten the engine lifespan. \nAbout the only mod I decided on was the all weather floor mats…not weather-tech, but the custom leather measured ones for about half the price.\nAlloy wheels come standard. The car even sends me text messages if I forget to lock the doors. Also I love the auto start feature that lets me warm my car up on cold mornings.\nAbout the only criticism I have for the car is that the space behind the rear seat is not generous, but that is by design, not accident. A longer vehicle wouldn’t handle as brilliantly as this one does. No, I never plan to take it off road but for Chicago winters, it performs flawlessly.  I am getting about 26 mpg which I am happy with and the headlights are the brightest I have ever had. \nIf you want a vehicle to haul lots of stuff, the RAV4 or CRV would probably be a better fit. But if you want a real drivers car that makes very few compromises, has tons of standard features, safety tech like crazy, standard AWD and something you would be proud of every time you get to drive it, the CX-5 is the compact SUV for you as it was for me!",
      "ratings": {
        "overall": 5,
        "value": 5,
        "reliability": 5,
        "performance": 4,
        "styling": 5,
        "comfort": 5,
        "quality": 5
      },
      "recommend": true,
      "submission_date": "3/13/2022",
      "pros": "Drives like a sports car",
      "cons": "Conservative space behind the back seat",
      "feedback": {
        "positive_count": 2,
        "negative_count": 0,
        "total_count": 2,
        "positive_link": null,
        "negative_link": null
      },
      "photos": [],
      "staff_review": false,
      "incentivized": false,
      "ownership_status": "I own this car"
    },
    { ... }
  ]
}
 

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/reviews

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
year required string

Example: 2024

make required string

Example: mazda

model required string

Example: cx-5

page optional integer

optional Page number for pagination Example: 1

perPage optional integer

optional Items per page Example: 6

bodystyle optional string

optional

vehicle_id optional string

optional Vehicle ID for specific trim

trim optional string

optional Trim name

sort optional string

optional Sort by (e.g., "recent", "helpful")

filter optional string

optional Filter reviews

keyword optional string

optional Search keyword in reviews

GET /v1/rankings

requires authentication

Retrieve vehicle rankings across various categories

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/rankings'
params = {
  'year': '2024',
  'make': 'mazda',
  'model': 'cx-5',
}
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/rankings';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'year' => '2024',
            'make' => 'mazda',
            'model' => 'cx-5',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/rankings"
);

const params = {
    "year": "2024",
    "make": "mazda",
    "model": "cx-5",
};
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/rankings?year=2024&make=mazda&model=cx-5" \
    --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"
  },
  "body": [
    {
      "details": {
        "displayName": "Horsepower",
        "columnHeader": "HP",
        "omnitureName": "rankhp",
        "value": "187"
      },
      "results": [
        {
          "position": 1,
          "value": "564",
          "manufacturer": "Fisker",
          "model": "Ocean",
          "year": 2024
        },
        { ... }
      ]
    },
    {
      "details": {
        "displayName": "MPG Combined",
        "columnHeader": "MPG",
        "omnitureName": "rankmpg",
        "value": "26"
      },
      "results": [
        {
          "position": 1,
          "value": "44",
          "manufacturer": "Dodge",
          "model": "Hornet",
          "year": 2024
        },
        { ... }
      ]
    },
    {
      "details": {
        "displayName": "Consumer Ratings",
        "columnHeader": "Rating",
        "omnitureName": "rankconsrat",
        "value": "4.4"
      },
      "results": [
        {
          "position": 1,
          "value": "4.7",
          "manufacturer": "Jeep",
          "model": "Compass",
          "year": 2024
        },
        { ... }
      ]
    }
  ]
}
 

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/rankings

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
year required string

Example: 2024

make required string

Example: mazda

model required string

Example: cx-5

bodystyle optional string

optional

zipcode optional string

optional

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 = {
  'vehicleId': '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' => [
            'vehicleId' => '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 = {
    "vehicleId": "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?vehicleId=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
vehicleId required string

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 = {
  'vehicleId': '358404',
}
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' => [
            'vehicleId' => '358404',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/recalls"
);

const params = {
    "vehicleId": "358404",
};
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?vehicleId=358404" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "vehicle_id": "358404",
    "total_recalls": 7
  },
  "body": {
    "recalls": [
      {
        "type": "Recall",
        "summary": "GENERAL MOTORS IS RECALLING CERTAIN MODEL YEAR 2011 CADILLAC ESCALADE EXT, CHEVROLET AVALANCHE, ...",
        "component": "Suspension:rear:axle:spindle",
        "consequence": "THE DRIVER MAY HEAR A BANGING NOISE COMING FROM THE AXLE. IF THE PIN SHIFTS OUT OF POSITION, ...",
        "remedy": "DEALERS WILL INSTALL A NEW REAR AXLE CROSS PIN FREE OF CHARGE. THE SAFETY RECALL IS EXPECTED TO BEGIN DURING JANUARY 2011...",
        "report_date": "",
        "nhtsa_campaign_id": "",
        "manufacturer_recall_no": "",
        "potential_affected_units": "",
        "manufacture_dates": ""
      },
      { ... }
    ]
  }
}
 

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
vehicleId required string

Example: 358404

Vehicle Commerce & Availability

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

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

GET /v1/for-sale

requires authentication

Retrieve combined vehicle listings from Kelley Blue Book (KBB) and Carmax with normalized schema

Example request:
import requests
import json

url = 'https://api.steadyapi.com/v1/vehicles/for-sale'
params = {
  'make': 'mazda',
  'model': 'cx-5',
  'year': '2024',
  'zipcode': '73170',
  'source': 'carmax',
  'radius': '50',
  'page': '1',
  'per_page': '20',
  'sort_by': 'price',
  'sort_order': 'desc',
}
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/for-sale';
$response = $client->get(
    $url,
    [
        'headers' => [
            'Authorization' => 'Bearer {YOUR_AUTH_KEY}',
        ],
        'query' => [
            'make' => 'mazda',
            'model' => 'cx-5',
            'year' => '2024',
            'zipcode' => '73170',
            'source' => 'carmax',
            'radius' => '50',
            'page' => '1',
            'per_page' => '20',
            'sort_by' => 'price',
            'sort_order' => 'desc',
        ],
    ]
);
$body = $response->getBody();
print_r(json_decode((string) $body));
const url = new URL(
    "https://api.steadyapi.com/v1/vehicles/for-sale"
);

const params = {
    "make": "mazda",
    "model": "cx-5",
    "year": "2024",
    "zipcode": "73170",
    "source": "carmax",
    "radius": "50",
    "page": "1",
    "per_page": "20",
    "sort_by": "price",
    "sort_order": "desc",
};
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/for-sale?make=mazda&model=cx-5&year=2024&zipcode=73170&source=carmax&radius=50&page=1&per_page=20&sort_by=price&sort_order=desc" \
    --header "Authorization: Bearer {YOUR_AUTH_KEY}"

Example response (200, Success):


{
  "meta": {
    "version": "v1.0",
    "status": 200,
    "copywrite": "https://steadyapi.com",
    "make": "MAZDA",
    "model": "CX-5",
    "year": null,
    "zipcode": "73170",
    "search_radius": 50,
    "total_listings": 558,
    "total_pages": 28,
    "source": "carmax",
    "sorting": {
      "by": "relevance",
      "order": "asc"
    },
    "price_range": {
      "min": 12998,
      "max": 28998,
      "avg": 21898
    },
    "year_range": {
      "min": 2016,
      "max": 2025
    },
    "mileage_range": {
      "min": 14960,
      "max": 116814,
      "avg": 50235
    }
  },
  "body": [
    {
      "id": 28135196,
      "vin": "JM3KFACM7L0805890",
      "year": 2020,
      "make": "Mazda",
      "model": "CX-5",
      "trim": "Touring",
      "price": 22998,
      "mileage": 31522,
      "exterior_color": "Blue",
      "interior_color": "Black",
      "transmission": "Automatic",
      "drive_train": "Front Wheel Drive",
      "engine": "2.5L",
      "fuel_type": "Gas",
      "mpg_city": 25,
      "mpg_highway": 31,
      "body_style": "4D Sport Utility",
      "listing_type": "USED",
      "days_on_market": null,
      "is_new": false,
      "is_certified": false,
      "images": [
        {
          "url": "https://img2.carmax.com/assets/28135196/hero.jpg?width=400&height=300",
          "width": 400,
          "height": 300,
          "alt": "2020 Mazda CX-5"
        }
      ],
      "dealer": {
        "name": "Oklahoma City",
        "phone": "",
        "rating": 4.63157894736842,
        "review_count": 38,
        "location": {
          "address": "",
          "city": "Oklahoma City",
          "state": "OK",
          "zip": "",
          "distance": 19.1
        }
      },
      "price_details": {
        "sale_price": 22998,
        "msrp": null,
        "price_indicator": null,
        "price_valid_until": null
      },
      "features": [
        "Alloy Wheels",
        "Rear Defroster",
        "Power Mirrors",
        ...
      ],
      "vhr_preview": [],
      "source_url": "https://www.carmax.com/car/28135196",
      "stock_number": 28135196
    },
    { ... }
  ]
}
 

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/for-sale

Headers

Authorization Bearer {YOUR_AUTH_KEY}

Query Parameters

Parameter Type Description
make required string

Example: mazda

model required string

Example: cx-5

year optional string

optional Example: 2024

zipcode optional string

optional Example: 73170

source optional string

optional Options: carmax or kbb (default: kbb) Example: carmax

radius optional integer

optional Search radius in miles (default: 50) Example: 50

min_price optional integer

optional Minimum price

max_price optional integer

optional Maximum price

min_mileage optional integer

optional Minimum mileage

max_mileage optional integer

optional Maximum mileage

page optional integer

optional Page number (default: 1) Example: 1

per_page optional integer

optional Items per page (default: 20, max: 50) Example: 20

sort_by optional string

optional Sorting fields: relevance, price, mileage, year, distance, date_listed (default: relevance) Example: price

sort_order optional string

optional Sorting order (default: asc) Example: desc