Bring a Trailer API endpoint
Runs Bring a Trailer's site search and returns the matching live listings, make and model pages, previous auctions (sold, reserve not met and withdrawn, with final prices), past events and editorial stories, each with its own total. section narrows the response to one list and pages through it; every list pages 12 rows at a time except previous auctions at 24, and live listings (up to 100, repeated on every site page) come back only on page 1. A term that is exactly a make, model or category name (Ferrari, BMW 2002, boat) makes the site redirect to that page: the response then carries redirect and empty lists, and phrase=true runs the search instead. Member profiles are never returned.
/bringatrailer/searchq is required: 2 to 100 characters without double quotes (for example turbo, sunroof delete or 1955). The search matches words across titles, descriptions and story text; it is not a filtered listing query, so use bringatrailer-results with make, model_id, era and the other filters when you need to narrow the archive, and this endpoint when you want what the site search box returns.
Parameters:
section chooses what to return. all (default) returns every list; live_listings, models, previous_auctions, events and stories return only that list and page through it.page starts at 1. Models, events and stories show 12 rows per page and previous auctions 24; per_page in the response states this. With section=all, page advances every list together.phrase=true matches q as an exact phrase.Notable response behavior:
Ferrari, BMW 2002, boat) makes the site answer with that page instead of results. The response then has redirect (kind is make, model or page, with the page's url and path) and empty lists. Send the same term with phrase=true to run the search anyway, or use bringatrailer-makes and bringatrailer-results for the make or model.totals has a key only for lists the search matched: live_listings, models, previous_auctions, events, stories. total is their sum for section=all and the list's own count otherwise. A term with no hits returns total: 0, empty lists and an empty totals.live_listings come back only on page 1 (the site repeats them on every page), at most 100; live_listings_truncated is true when more matched. They have the same shape as bringatrailer-live rows.previous_auctions rows are the search-page cards: status is sold, reserve_not_met or withdrawn, price and currency are the final or high bid, and ends_at is a calendar date (2026-11-02), not a timestamp, because the card shows only the date. Year, era, categories, comments, watchers and views are not on the card; open the listing with bringatrailer-listing for those.models rows give make and model slugs and the page path. The slugs are the URL segments, not the numeric model_id that bringatrailer-results takes; look the model up in bringatrailer-makes.stories carry published_date from the story URL, and events carry the date text the page shows.totals.Example request: /api/v1/bringatrailer/search?q=sunroof%20delete§ion=stories
Example response (trimmed):
{
"code": 200,
"data": {
"query": "sunroof delete",
"phrase": false,
"section": "stories",
"page": 1,
"per_page": {
"events": 12,
"models": 12,
"previous_auctions": 24,
"stories": 12
},
"total": 4,
"totals": {
"stories": 4
},
"live_listings": [],
"models": [],
"previous_auctions": [],
"events": [],
"stories": [
{
"title": "One Owner 5-Speed/Sunroof Delete: 1980 Porsche 928",
"url": "https://bringatrailer.com/2017/01/05/1980-porsche-928-all-original-california-car/",
"published_date": "2017-01-05",
"image_url": "https://bringatrailer.com/wp-content/uploads/2017/01/example.jpg?w=470&h=318&crop=1"
}
]
},
"msg": "OK"
}
A previous-auction row from section=previous_auctions:
{
"id": 5194332,
"title": "1996 BMW M3 Coupe 5-Speed w/ Sunroof Delete",
"url": "https://bringatrailer.com/listing/1996-bmw-m3-17/",
"status": "reserve_not_met",
"price": 11800,
"price_text": "USD $11,800",
"currency": "USD",
"result_text": "Bid to USD $11,800 on 10/3/2018",
"ends_at": "2018-10-03",
"country": "United States",
"country_code": "US",
"no_reserve": false,
"premium": false,
"repeat": true
}
A redirected term (q=ferrari, no phrase):
{
"code": 200,
"data": {
"query": "ferrari",
"phrase": false,
"section": "all",
"page": 1,
"total": 0,
"totals": {},
"redirect": {
"url": "https://bringatrailer.com/ferrari/",
"path": "ferrari",
"kind": "make"
},
"live_listings": [],
"models": [],
"previous_auctions": [],
"events": [],
"stories": []
},
"msg": "OK"
}
Section values: all, live_listings, models, previous_auctions, events, stories.
| Field | Filled in, of 24 checked | Values in the sample |
|---|---|---|
| id | 24 | |
| title | 24 | “1996 Porsche 911 Turbo” and 23 other values |
| url | 24 | bringatrailer.com |
| status | 24 | sold (16), reserve_not_met (8) |
| price | 24 | 2,250 to 302,000, median 57,000 |
| price_text | 24 | “USD $238,000” and 23 other values |
| currency | 24 | USD in all 24 |
| result_text | 24 | “Sold for USD $238,000 on 11/5/2026” and 23 other values |
| ends_at | 24 | 2026-10-31 to 2026-11-05 |
| country | 24 | United States (23), Canada (1) |
| country_code | 24 | |
| no_reserve | 24 | true in 4 of 24 |
| premium | 24 | true in 2 of 24 |
| repeat | 24 | true in 1 of 24 |
| excerpt | 24 | median 344 characters |
| thumbnail_url | 24 | bringatrailer.com |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | Yes | Text to search, 2 to 100 characters without double quotes | sunroof delete | |
| phrase | boolean | No | Match q as an exact phrase; needed when q is exactly a make, model or category name | ||
| section | string | No | List to return: all (default), live_listings, models, previous_auctions, events or stories Allowed values: all, live_listings, models, previous_auctions, events, stories. | ||
| page | integer | No | Page number from 1 Minimum: 1. Maximum: 10000. | ||
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bringatrailer/search?q=sunroof+delete§ion=stories&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"data": {
"query": "sunroof delete",
"phrase": false,
"section": "stories",
"page": 1,
"per_page": {
"events": 12,
"models": 12,
"previous_auctions": 24,
"stories": 12
},
"total": 4,
"totals": {
"stories": 4
},
"live_listings": [],
"models": [],
"previous_auctions": [],
"events": [],
"stories": [
{
"title": "One Owner 5-Speed/Sunroof Delete: 1980 Porsche 928",
"url": "https://bringatrailer.com/2017/01/05/1980-porsche-928-all-original-california-car/",
"published_date": "2017-01-05",
"image_url": "https://bringatrailer.com/wp-content/uploads/2017/01/example.jpg?w=470&h=318&crop=1"
}
]
},
"msg": "OK"
}Request schema
No body schema
Response schema
#/definitions/bringatrailer.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | bringatrailer.SearchResponse | No | ||||
| data.events | array | No | ||||
| data.events[].date_text | string | No | ||||
| data.events[].image_url | string | No | ||||
| data.events[].title | string | No | ||||
| data.events[].url | string | No | ||||
| data.live_listings | array | No | Auction record, 23 fields: categories, comments, country, country_code, currency, ends_at, era, excerpt, id, model_ids, no_reserve, premium and 11 more. Described under List live Bring a Trailer auctions API. | |||
| data.live_listings_truncated | boolean | No | ||||
| data.models | array | No | ||||
| data.models[].image_url | string | No | ||||
| data.models[].make | string | No | ||||
| data.models[].model | string | No | ||||
| data.models[].path | string | No | ||||
| data.models[].title | string | No | ||||
| data.models[].url | string | No | ||||
| data.page | integer | No | ||||
| data.per_page | object | No | ||||
| data.phrase | boolean | No | ||||
| data.previous_auctions | array | No | Auction record, 23 fields: categories, comments, country, country_code, currency, ends_at, era, excerpt, id, model_ids, no_reserve, premium and 11 more. Described under List live Bring a Trailer auctions API. | |||
| data.query | string | No | ||||
| data.redirect | bringatrailer.SearchRedirect | No | ||||
| data.redirect.kind | string | No | ||||
| data.redirect.path | string | No | ||||
| data.redirect.url | string | No | ||||
| data.section | string | No | ||||
| data.stories | array | No | ||||
| data.stories[].image_url | string | No | ||||
| data.stories[].published_date | string | No | ||||
| data.stories[].title | string | No | ||||
| data.stories[].url | string | No | ||||
| data.total | integer | No | ||||
| data.totals | object | 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/search?q=sunroof+delete§ion=stories&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"