Hemmings APIhemmings.com ↗
Access live Hemmings Auctions vehicle listings via API. Get current high bids, listing titles, images, and URLs for every active auction lot.
What is the Hemmings API?
The Hemmings Auctions API exposes 1 endpoint — list_live_auctions — that returns all currently active vehicle auction lots from Hemmings.com, along with 7 response fields per lot including the current high bid, listing title, public URL, and primary image. Only live auctions are included; ended or sold lots are excluded. The endpoint supports pagination so you can page through the full set of active inventory in configurable batch sizes.
curl -X GET 'https://api.parse.bot/scraper/d18ecb15-5632-485d-ab03-93206a5d7eaa/list_live_auctions?per_page=100' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace hemmings-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: browse live Hemmings Auctions listings."""
from parse_apis.hemmings_com_api import Hemmings, InputFormatInvalid
client = Hemmings()
# Page through the first few live auction lots.
for auction in client.auctions.list(per_page=10, limit=5):
reserve_tag = "reserve met" if auction.reserve_met else "reserve not met"
print(f"{auction.year} {auction.make} — {auction.price or 'no bids yet'} ({reserve_tag})")
# Grab the first listing to inspect its full detail fields.
featured = client.auctions.list(limit=1).first()
if featured is not None:
print(f"\nFeatured: {featured.long_title}")
print(f" Current bid : {featured.current_bid or 'none'}")
print(f" Location : {featured.location}")
print(f" Listing URL : {featured.url}")
print(f" Ends : {featured.end_date}")
# Demonstrate typed error handling for an invalid page value.
try:
client.auctions.list(per_page=0, limit=1).first()
except InputFormatInvalid as e:
print(f"\nCaught expected error: {e.message}")
print("\nexercised: auctions.list")
Returns one page of currently live Hemmings Auctions listings (status is 'live' for every item; ended/sold auctions are excluded). Each record is one auction lot with its current high bid ('price', a formatted USD string, null when no bid has been placed yet), the public listing URL and the primary image URL, plus title, year/make/model, seller location, reserve flags and start/end timestamps. Ordering is the site's 'recommended' order. Pagination is caller-controlled via 'page' (defaults to 1) and 'per_page' (defaults to 30, max 100); 'total_count' and 'has_more' are taken from the source. Each call costs three upstream requests (listing page, script bundle, search API). An empty 'auctions' array on a page beyond the last one is a valid result.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number over the live-auction result set. |
| per_page | integer | Number of auctions per page, 1 to 100. |
{
"type": "object",
"fields": {
"page": "integer page number echoed from the request",
"auctions": "array of live auction lots; each has id (integer listing id), title, long_title, status ('live'), price (current high bid as formatted USD string or null), current_bid, has_reserve, reserve_met, url (listing page), image_url (primary photo), year, make, model (null for non-vehicle lots), location, start_date, end_date",
"has_more": "boolean, true when further pages exist",
"per_page": "integer page size echoed from the request",
"total_count": "integer total number of live auctions reported by the site"
},
"sample": {
"data": {
"page": 1,
"auctions": [
{
"id": 35231,
"url": "https://www.hemmings.com/auction/1936-mercedes-benz-500k-replica-north-fort-myers-fl-928817",
"make": "Mercedes-Benz",
"year": 1936,
"model": "500K Replica",
"price": "$10,250",
"title": "1936 Mercedes-Benz 500K Replica",
"status": "live",
"end_date": "2026-09-03T16:00:00-04:00",
"location": "North Fort Myers, Florida 33917",
"image_url": "https://thumbor-auction.hmn.com/Rml8OKioRuGDlO9hnIY9S1TZMdk=/900x0/filters:format(webp)/4506736/paul19.jpg",
"long_title": "Classic Roadsters Marlene: 1936 Mercedes-Benz 500K Replica",
"start_date": "2026-08-27T07:00:00-04:00",
"current_bid": "$10,250",
"has_reserve": true,
"reserve_met": false
}
],
"has_more": true,
"per_page": 30,
"total_count": 38
},
"status": "success"
}
}About the Hemmings API
What the API Returns
The list_live_auctions endpoint returns a paginated snapshot of every auction lot currently live on Hemmings Auctions. Each lot in the auctions array includes an integer id, a short title, a long_title with additional vehicle detail, the status field (always 'live'), a price field showing the current high bid as a formatted USD string (or null when no bid has been placed yet), the public url for the listing page, and a primary image URL.
Pagination
Two optional query parameters control pagination: page (1-based integer, defaults to 1) and per_page (integer from 1 to 100). Each response echoes both values back alongside a total_count integer representing how many live auctions exist at the time of the request, and a has_more boolean indicating whether additional pages remain. This lets you walk the full live inventory in a controlled loop without over-fetching.
Coverage and Scope
The endpoint reflects only auctions in live status. Completed, sold, or upcoming-but-not-yet-open lots are not included in results. The price field represents the current leading bid at the moment of the API call, so values change as bidding progresses. Applications that need a near-real-time view of bid activity should poll at an appropriate interval rather than treating a single response as a static dataset.
The Hemmings API is a managed, monitored endpoint for hemmings.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when hemmings.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official hemmings.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Monitor current high bids across all live Hemmings lots to track auction price movement over time.
- Build a watchlist tool that alerts users when a listing matching a title keyword appears in live auctions.
- Aggregate
total_countandpricedata to generate dashboards showing bidding activity volume. - Pull
urlandimagefields to embed live Hemmings listings into a classic car enthusiast newsletter or site. - Compare
pricevalues across multiple API polls to estimate bid velocity on individual auction lots. - Seed a database of collector vehicle listings using
id,title, andlong_titlefor future reference.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Hemmings have an official developer API?+
What does the `price` field represent, and when is it null?+
price field contains the current high bid on a lot, formatted as a USD string (for example, '$12,500'). It is null when no bids have been placed on that lot yet. It reflects the bid state at the moment the API responds, not a historical high.Does the API return ended, sold, or upcoming auctions?+
list_live_auctions endpoint only returns lots where status is 'live'. Ended, sold, and scheduled-but-not-open auctions are excluded. You can fork this API on Parse and revise it to add an endpoint covering completed or upcoming lots.Can I filter live auctions by make, model, year, or price range?+
title or long_title. You can fork this API on Parse and revise it to add attribute-based filter parameters.How does pagination behave when new lots go live between page requests?+
total_count reflects the count at the time of each individual request. If auctions open or close between page fetches, the count may shift and a lot could appear on two pages or be skipped. For a consistent snapshot, complete pagination as quickly as possible or deduplicate by id.