API Documentation
Access comprehensive auction data for classic and vintage vehicles through our RESTful API.
Getting Started
Base URL
https://api.oldcarsdata.comAuthentication
Most endpoints require authentication using an API key. Include your API key in the request headers:
Authorization: Bearer YOUR_API_KEYThe /makes and /models endpoints are public and do not require authentication. They return normalized make and model names you should use when calling /auctions. All other REST endpoints require a valid API key.
For MCP, use list_makes and list_models the same way: those tools do not count toward your plan query limit (see Rate Limits below).
Getting an API Key
To get an API key, you need to:
- Sign in or create an account
- Subscribe to an active plan
- Generate API keys in your profile
Keep your API key secure. Do not share it publicly or commit it to version control.
Response Format
All API responses are returned in JSON format. Successful responses include a data field containing the requested information, and paginated endpoints include a meta field with pagination details:
{
"data": [ ... ],
"meta": {
"total": 150,
"page": 1,
"limit": 50,
"total_pages": 3
}
}Error responses follow a consistent format with an error type and a message describing what went wrong:
{
"error": "Validation Error",
"message": "make: String must contain at least 1 character(s)"
}Data Updates
Auction data is updated daily around 12pm ET / 9am PT.
Historical auction data is available dating back to 2018.
Rate Limits
Rate limits are applied per API key (or OAuth session for MCP) based on your subscription plan. Counts are metered requests — calls that consume your quota for the billing period:
| Plan | Metered requests per billing period |
|---|---|
| Starter | 10 |
| 1k | 1,000 |
| 10k | 10,000 |
Excluded from metered requests (do not count toward your query limit):
- REST:
GET /makes,GET /models - MCP:
list_makes,list_modelswhen they are the only tool invocations in that HTTP request. If a single MCP request batches multiple tools and any of them is metered (for examplesearch_auctionsorget_price_stats), that request counts as one metered call.
Everything else counts, including GET /auctions, GET /stats, MCP search_auctions, MCP get_price_stats, and other MCP JSON-RPC methods (for example protocol handshake calls).
Rate limit headers are included on authenticated responses:
X-RateLimit-Limit— Maximum requests allowedX-RateLimit-Remaining— Remaining requests in current windowX-RateLimit-Reset— Timestamp when the rate limit resets
Error Handling
The API uses standard HTTP status codes:
| Code | Meaning |
|---|---|
200 | Success |
400 | Bad Request (validation errors) |
401 | Unauthorized (invalid or missing API key) |
403 | Forbidden (plan does not include this endpoint) |
429 | Too Many Requests (rate limit exceeded) |
500 | Internal Server Error |
503 | Service Unavailable |
400 — Validation Error:
{
"error": "Validation Error",
"message": "make: String must contain at least 1 character(s)",
"details": {
"make": ["String must contain at least 1 character(s)"]
}
}401 — Unauthorized:
{
"error": "Unauthorized",
"message": "API key is required. Provide it via Authorization: Bearer <key> header"
}429 — Rate Limit Exceeded:
{
"error": "Rate Limit Exceeded",
"message": "You have exceeded your plan limit of 1000 requests. Resets on 2025-04-01T00:00:00.000Z."
}Data Sources
Auction data is aggregated from major collector car auction platforms:
- Bring a Trailer — Online auctions for enthusiast vehicles
- Cars & Bids — Modern enthusiast car auctions
- Hagerty — Collector car auctions and valuations
- PCAR Market — Porsche-specific auctions
- All Collector Cars — Classic car marketplace
- Gooding & Co — Premium collector car auctions
- RM Sotheby's — Premium collector car auctions
Data is normalized across sources with consistent make/model names, standardized colors, and structured vehicle details.
Available Endpoints
Browse the available endpoints in the navigation sidebar to view detailed documentation, request parameters, response formats, and code examples.