Get Auctions

Retrieve paginated auction listings with filtering and sorting options. Starter plan users are limited to the latest 20 auctions.

GET https://api.oldcarsdata.com/auctions

Looking for active listings?

Use GET /auctions/live to list currently active auctions. Live auctions are currently in beta and include supported Bring a Trailer (bringatrailer), Cars & Bids (carsandbids), and PCAR Market (pcarmarket) listings.

How to choose query parameters

Browse by make/model: Pass make, model, both, or neither. Use GET /makes and GET /models for exact normalized strings. On MCP, use list_makes and list_models the same way.

VIN lookup: Pass vin for an exact raw match as stored. You can still add status, source, keyword, year/price filters, etc.

Seller lookup: Pass seller_username for an exact match. Combine with other filters as needed.

Reference calls to /makes and /models do not count toward your API query limit. GET /auctions does count.

Authentication

This endpoint requires authentication. Include your API key in the Authorization header:

Authorization: Bearer YOUR_API_KEY

Starter Plan Limitation: Starter plan users are limited to the latest 20 auctions regardless of filters or pagination. Upgrade to a paid plan for full historical data access.

Rules

  • No required vehicle anchor: make, model, vin, and seller_username are all optional.
  • vin / seller_username: Exact string match against the stored value (not normalized).
  • Combining filters: status, source, keyword, year_min / year_max, price_min / price_max, sort, direction, page, and limit combine with any vehicle, VIN, or seller filters. Example: ?model=911&status=sold or ?seller_username=classic_seller&source=bringatrailer.
  • Broad searches: If no filters are provided, the endpoint returns paginated completed auction results sorted by auction date by default.

Request Parameters

FieldTypeRequiredDescription
AuthorizationheaderYesBearer token with your API key: Bearer YOUR_API_KEY
makestringNoExact normalized make from Get Makes.
vinstringNoExact VIN (raw).
seller_usernamestringNoExact seller username.
modelstringNoNormalized model from Get Models.
year_minintegerNoMinimum year filter (inclusive)
year_maxintegerNoMaximum year filter (inclusive)
price_minintegerNoMinimum price filter (inclusive)
price_maxintegerNoMaximum price filter (inclusive)
statusenumNoAuction status filter. Options: "sold", "bid to", "reserve not met", "canceled", "unknown"
sourcestringNoSource platform filter. Examples: bringatrailer, carsandbids, hagerty, pcarmarket, acc, allcollectorcars, gooding, rmsothebys
keywordstringNoSearch keyword to match in title and description (case-insensitive)
sortenumNoSort field. Options: "date" (default), "price", "year", "bids"
directionenumNoSort direction. Options: "asc", "desc" (default)
pageintegerNoPage number for pagination. Minimum: 1, default: 1
limitintegerNoNumber of results per page. Range: 1-100, default: 50

Code Examples

Mode A — Make and model (cURL)

bash
curl "https://api.oldcarsdata.com/auctions?make=Toyota&model=Land+Cruiser&limit=10" \  -H "Authorization: Bearer YOUR_API_KEY"

Mode B — VIN only (cURL)

bash
curl "https://api.oldcarsdata.com/auctions?vin=WP0AB0911FS100123" \  -H "Authorization: Bearer YOUR_API_KEY"

Mode C — Seller only (cURL)

bash
curl "https://api.oldcarsdata.com/auctions?seller_username=classic_seller" \  -H "Authorization: Bearer YOUR_API_KEY"

JavaScript (make/model)

javascript
const response = await fetch(  'https://api.oldcarsdata.com/auctions?make=Toyota&model=Land+Cruiser&limit=10',  {    headers: {      'Authorization': 'Bearer YOUR_API_KEY'    }  });const data = await response.json();

JavaScript (VIN)

javascript
const params = new URLSearchParams({ vin: 'WP0AB0911FS100123' });const response = await fetch(  `https://api.oldcarsdata.com/auctions?${params}`,  { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } });const data = await response.json();

JavaScript (seller)

javascript
const params = new URLSearchParams({ seller_username: 'classic_seller' });const response = await fetch(  `https://api.oldcarsdata.com/auctions?${params}`,  { headers: { 'Authorization': 'Bearer YOUR_API_KEY' } });const data = await response.json();

Python (make/model)

python
import requestsresponse = requests.get(    'https://api.oldcarsdata.com/auctions',    params={'make': 'Toyota', 'model': 'Land Cruiser', 'limit': 10},    headers={'Authorization': 'Bearer YOUR_API_KEY'})data = response.json()

Python (VIN)

python
import requestsresponse = requests.get(    'https://api.oldcarsdata.com/auctions',    params={'vin': 'WP0AB0911FS100123'},    headers={'Authorization': 'Bearer YOUR_API_KEY'})data = response.json()

Python (seller)

python
import requestsresponse = requests.get(    'https://api.oldcarsdata.com/auctions',    params={'seller_username': 'classic_seller'},    headers={'Authorization': 'Bearer YOUR_API_KEY'})data = response.json()

Success Response (200)

Auctions retrieved successfully.

json
{  "data": [    {      "id": 12345,      "source": "bringatrailer",      "url": "https://bringatrailer.com/listing/...",      "title": "1970 Toyota Land Cruiser FJ40",      "auction_status": "sold",      "price": 45000,      "currency": "USD",      "auction_end_date": "2024-01-15",      "mileage": 85000,      "vin": "FJ40123456",      "title_status": "clean",      "city": "Los Angeles",      "state": "CA",      "zip": "90001",      "seller_username": "seller123",      "year": 1970,      "has_reserve": true,      "listing_make": "Toyota",      "listing_model": "Land Cruiser",      "engine": "4.2L I6",      "drivetrain": "4WD",      "transmission": "Manual",      "body_style": "SUV",      "exterior_color": "Beige",      "standard_exterior_color": "Beige",      "interior_color": "Brown",      "standard_interior_color": "Brown",      "seller_type": "private",      "ocd_make_name": "Toyota",      "ocd_model_name": "Land Cruiser",      "description": "Well-maintained FJ40...",      "ownership_history": "Original owner",      "modifications": ["Lift kit", "Aftermarket wheels"],      "known_flaws": ["Minor rust on rear bumper"],      "recent_service_history": ["Oil change 2023", "Brake service 2023"],      "listing_details": ["Clean title", "No accidents"],      "created_at": "2024-01-10T10:00:00Z",      "featured_image_url": "https://bringatrailer.com/wp-content/uploads/2024/01/1970_toyota_land-cruiser_fj40_12345.jpg",      "stats": {        "views": 1250,        "watches": 45,        "likes": 12,        "bids": 23      }    }  ],  "meta": {    "total": 150,    "page": 1,    "limit": 10,    "total_pages": 15  }}

Response Fields

FieldTypeDescription
dataarrayArray of auction objects
data[].idnumberUnique auction identifier
data[].sourcestring | nullSource platform name
data[].urlstring | nullURL to the auction listing
data[].titlestring | nullAuction listing title
data[].auction_statusenumStatus: "sold", "bid to", "reserve not met", "canceled", "unknown"
data[].pricenumber | nullFinal sale price or bid amount
data[].currencystring | nullISO 4217 currency code (e.g. "USD", "CAD")
data[].auction_end_datestring | nullAuction end date (YYYY-MM-DD format)
data[].mileagenumber | nullVehicle mileage
data[].vinstring | nullVehicle identification number
data[].title_statusstring | nullTitle status (e.g., "clean", "salvage")
data[].citystring | nullVehicle location city
data[].statestring | nullVehicle location state
data[].zipstring | nullVehicle location ZIP code
data[].seller_usernamestring | nullSeller username
data[].yearnumber | nullVehicle model year
data[].has_reserveboolean | nullWhether the auction had a reserve price
data[].listing_makestring | nullMake name from listing
data[].listing_modelstring | nullModel name from listing
data[].ocd_make_namestring | nullNormalized make name
data[].ocd_model_namestring | nullNormalized model name
data[].enginestring | nullEngine specification
data[].drivetrainstring | nullDrivetrain type
data[].transmissionstring | nullTransmission type
data[].body_stylestring | nullVehicle body style
data[].exterior_colorstring | nullExterior color as listed
data[].standard_exterior_colorstring | nullNormalized exterior color
data[].interior_colorstring | nullInterior color as listed
data[].standard_interior_colorstring | nullNormalized interior color
data[].seller_typestring | nullSeller type (e.g., "private", "dealer")
data[].descriptionstring | nullListing description text
data[].ownership_historystring | nullOwnership history information
data[].modificationsarrayArray of modification descriptions
data[].known_flawsarrayArray of known flaw descriptions
data[].recent_service_historyarrayArray of recent service history entries
data[].listing_detailsarrayArray of listing detail strings
data[].created_atstring | nullRecord creation timestamp (ISO 8601)
data[].featured_image_urlstring | nullURL to the featured image
data[].statsobjectAuction engagement statistics
data[].stats.viewsnumber | nullNumber of views
data[].stats.watchesnumber | nullNumber of watchers
data[].stats.likesnumber | nullNumber of likes/comments
data[].stats.bidsnumber | nullNumber of bids
metaobjectPagination metadata
meta.totalnumberTotal number of matching auctions
meta.pagenumberCurrent page number
meta.limitnumberNumber of results per page
meta.total_pagesnumberTotal number of pages

Error Responses

FieldTypeDescription
errorstringError type identifier (e.g., "Validation Error", "HTTP Error")
messagestringHuman-readable error message
detailsobjectValidation error details (only on 400 responses). Keys are field names, values are arrays of error messages.

400 — Validation Error:

json
{  "error": "Validation Error",  "message": "limit: Number must be less than or equal to 100",  "details": {    "limit": ["Number must be less than or equal to 100"]  }}

401 — Unauthorized:

json
{  "error": "Unauthorized",  "message": "API key is required. Provide it via Authorization: Bearer <key> header"}

Summarize this page with: