Bring a Trailer API endpoint
Returns the price chart Bring a Trailer draws for a make or a model: summaries (count, min, median, mean, max) of sold and reserve-not-met final bids, sold prices by closing year, and the most recent auctions as dated points. Exactly one of make and model_id is required; the same filters as bringatrailer_results narrow the chart. Bring a Trailer returns at most the most recent 10,000 auctions, reported as truncated. Large makes can take up to about 50 seconds.
/bringatrailer/price-historyReturns the price chart Bring a Trailer draws for a make or a model: how much its completed auctions sold for, over time. It is a different view from bringatrailer-results, which pages through individual auctions.
Exactly one of make and model_id is required (Bring a Trailer only draws the chart for one of them). make is a make name from bringatrailer-makes and model_id a numeric models[].model_id from the same endpoint. The other filters of bringatrailer-results narrow the chart: q, exclude, category, era, origin, country, type, recency, min_year, max_year and max_bid (see bringatrailer-filters for the values). result and sort are not accepted: the chart always returns both the sold and the reserve-not-met series so the two can be compared.
type is premium or noreserve. recency is the closing window: 7D, 30D, 1Y, 2Y or 5Y (omit for all time).
points_limit is how many of the most recent auctions to list in points, 0 to 1000 (default 100). 0 returns only the summaries and the yearly table.
Notable response behavior:
sold and reserve_not_met each give count, min, median, mean and max of the final bids in USD (for a reserve-not-met auction the final bid is the high bid that failed to meet the reserve). All figures are computed over every auction in the chart, not just the listed points.sold_by_year is the same summary for sold auctions grouped by closing year, newest year first.points are the most recent auctions, newest first, each with id, title, url, amount, date (RFC 3339 UTC) and status (sold or reserve_not_met). Pass url to bringatrailer-listing for detail.truncated is true, the summaries cover only the window between window_start and window_end, and a narrower filter (a model, a recency or a year range) returns the whole history. Porsche, for example, is truncated.country returns 400.Example response (model_id=65064925, points_limit=3):
{
"code": 200,
"data": {
"scope": "model",
"model_id": 65064925,
"currency": "USD",
"sold": {
"count": 18,
"min": 6800,
"median": 49125,
"mean": 63794,
"max": 230000
},
"reserve_not_met": {
"count": 19,
"min": 13000,
"median": 49559,
"mean": 61058,
"max": 185000
},
"truncated": false,
"window_start": "2015-07-08T21:31:42Z",
"window_end": "2026-09-27T17:08:03Z",
"sold_by_year": [
{
"year": 2026,
"count": 3,
"min": 25500,
"median": 59000,
"mean": 55417,
"max": 81751
},
{
"year": 2025,
"count": 4,
"min": 18500,
"median": 33125,
"mean": 36375,
"max": 60750
},
{
"year": 2024,
"count": 2,
"min": 24000,
"median": 41125,
"mean": 41125,
"max": 58251
}
],
"points": [
{
"id": 122055310,
"title": "1959 Fiat-Abarth 750 Record Monza Zagato",
"url": "https://bringatrailer.com/listing/1959-abarth-record-monza-zagato-9/",
"amount": 59000,
"date": "2026-09-27T17:08:03Z",
"status": "sold"
},
{
"id": 120675513,
"title": "1957 Fiat-Abarth 750 Record Monza Zagato",
"url": "https://bringatrailer.com/listing/1957-abarth-750-4/",
"amount": 81751,
"date": "2026-09-13T17:00:20Z",
"status": "sold"
},
{
"id": 109099678,
"title": "No Reserve: 1959 Fiat-Abarth 750 GT Zagato Race Car Project",
"url": "https://bringatrailer.com/listing/1959-fiat-abarth-zagato-2/",
"amount": 25500,
"date": "2026-03-01T19:01:39Z",
"status": "sold"
}
]
},
"msg": "OK"
}
| Field | Filled in, of 5 checked | Values in the sample |
|---|---|---|
| id | 5 | |
| title | 5 | “2014 Porsche 911 Carrera Coupe 7-Speed” and 4 other values |
| url | 5 | bringatrailer.com |
| amount | 5 | 7,150 to 73,000, median 48,000 |
| date | 5 | 2026-11-04 |
| status | 5 | sold (4), reserve_not_met (1) |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| make | string | No | Make name from bringatrailer_makes; exactly one of make and model_id is required | Porsche | |
| model_id | integer | No | Numeric model id from bringatrailer_makes; exactly one of make and model_id is required | 65064925 | |
| q | string | No | Keyword that must appear in the listing | ||
| exclude | string | No | Keyword that must not appear in the listing | ||
| category | string | No | Comma-separated category ids from bringatrailer_filters | ||
| era | string | No | Comma-separated decade ids from bringatrailer_filters | ||
| origin | string | No | Comma-separated origin ids from bringatrailer_filters | ||
| country | string | No | Comma-separated ISO 3166-1 alpha-2 country codes | ||
| type | string | No | Auction type Allowed values: premium, noreserve. | ||
| recency | string | No | Closed within Allowed values: 7D, 30D, 1Y, 2Y, 5Y. | ||
| min_year | integer | No | Minimum model year Minimum: 1885. Maximum: 2100. | ||
| max_year | integer | No | Maximum model year Minimum: 1885. Maximum: 2100. | ||
| max_bid | integer | No | Maximum final bid in USD Minimum: 0. | ||
| points_limit | integer | No | Most recent auctions to list in points; 0 returns only the summaries Minimum: 0. Maximum: 1000. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bringatrailer/price-history?q=coffee&country=us&type=premium&recency=7D" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"scope": "model",
"model_id": 65064925,
"currency": "USD",
"sold": {
"count": 18,
"min": 6800,
"median": 49125,
"mean": 63794,
"max": 230000
},
"reserve_not_met": {
"count": 19,
"min": 13000,
"median": 49559,
"mean": 61058,
"max": 185000
},
"truncated": false,
"window_start": "2015-07-08T21:31:42Z",
"window_end": "2026-09-27T17:08:03Z",
"sold_by_year": [
{
"year": 2026,
"count": 3,
"min": 25500,
"median": 59000,
"mean": 55417,
"max": 81751
},
{
"year": 2025,
"count": 4,
"min": 18500,
"median": 33125,
"mean": 36375,
"max": 60750
},
{
"year": 2024,
"count": 2,
"min": 24000,
"median": 41125,
"mean": 41125,
"max": 58251
}
],
"points": [
{
"id": 122055310,
"title": "1959 Fiat-Abarth 750 Record Monza Zagato",
"url": "https://bringatrailer.com/listing/1959-abarth-record-monza-zagato-9/",
"amount": 59000,
"date": "2026-09-27T17:08:03Z",
"status": "sold"
},
{
"id": 120675513,
"title": "1957 Fiat-Abarth 750 Record Monza Zagato",
"url": "https://bringatrailer.com/listing/1957-abarth-750-4/",
"amount": 81751,
"date": "2026-09-13T17:00:20Z",
"status": "sold"
},
{
"id": 109099678,
"title": "No Reserve: 1959 Fiat-Abarth 750 GT Zagato Race Car Project",
"url": "https://bringatrailer.com/listing/1959-fiat-abarth-zagato-2/",
"amount": 25500,
"date": "2026-03-01T19:01:39Z",
"status": "sold"
}
]
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/bringatrailer.priceHistoryResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | bringatrailer.PriceHistoryResponse | No | ||||
| data.currency | string | No | ||||
| data.make | string | No | ||||
| data.model_id | integer | No | ||||
| data.points | array | No | ||||
| data.points[].amount | integer | No | ||||
| data.points[].date | string | No | ||||
| data.points[].id | integer | No | ||||
| data.points[].status | string | No | ||||
| data.points[].title | string | No | ||||
| data.points[].url | string | No | ||||
| data.reserve_not_met | bringatrailer.PriceSummary | No | ||||
| data.reserve_not_met.count | integer | No | ||||
| data.reserve_not_met.max | integer | No | ||||
| data.reserve_not_met.mean | integer | No | ||||
| data.reserve_not_met.median | integer | No | ||||
| data.reserve_not_met.min | integer | No | ||||
| data.scope | string | No | ||||
| data.sold | bringatrailer.PriceSummary | No | ||||
| data.sold.count | integer | No | ||||
| data.sold.max | integer | No | ||||
| data.sold.mean | integer | No | ||||
| data.sold.median | integer | No | ||||
| data.sold.min | integer | No | ||||
| data.sold_by_year | array | No | ||||
| data.sold_by_year[].count | integer | No | ||||
| data.sold_by_year[].max | integer | No | ||||
| data.sold_by_year[].mean | integer | No | ||||
| data.sold_by_year[].median | integer | No | ||||
| data.sold_by_year[].min | integer | No | ||||
| data.sold_by_year[].year | integer | No | ||||
| data.truncated | boolean | No | ||||
| data.window_end | string | No | ||||
| data.window_start | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/bringatrailer/price-history?q=coffee&country=us&type=premium&recency=7D" \
-H "x-api-key: $CRAWLORA_API_KEY"