Search Bring a Trailer auctions, live and completed results. Filter by auction status, sale status, make or model term, category, era, origin, location country, year range, bid range, auction type, range and free text, with sorting and page pagination. Results carry the current bid in USD, the bid count, the reserve state, the sale state (sold or bid to), the end time as ISO 8601 UTC, the location, the postal code, the seller type and the thumbnail. Page with page and per_page (1 to 32) and read has_more from the live total page count.
Run this endpoint
Endpoint
Parameters
Start with the required fields, then add optional filters only when your use case needs them.
Runnable path
This endpoint has no required query parameters.
21 optional filters available.
string
Optional
active (default) or past.
active
string
Optional
sold or unsold (reserve not met). Past auctions only.
example
string
Optional
ta (ending soonest), td (recently closed), ba (bid low to high), bd (bid high to low) or vd (popular).
ta
integer
Optional
1-based result page.
1
integer
Optional
Listings per page, 1 to 32.
2
string
Optional
Comma-separated term IDs from the filters endpoint, e.g. 1832980 for Ferrari.
example
string
Optional
Comma-separated category term IDs, e.g. 434 for Convertibles.
example
string
Optional
Era slug from the filters endpoint, e.g. pre-1900 or 2010s.
example
string
Optional
Comma-separated origin term IDs, e.g. 8 for Italian.
example
string
Optional
Comma-separated location term IDs, e.g. 89009061 for United States.
example
integer
Optional
Minimum model year.
10
integer
Optional
Maximum model year.
10
integer
Optional
Minimum current bid in USD.
10
integer
Optional
Maximum current bid in USD.
10
string
Optional
premium, no-reserve or alumni.
example
string
Optional
7D, 30D, 1Y, 2Y or 5Y.
example
string
Optional
Zip code for location filtering. Requires user_lat and user_lon.
example
number
Optional
Latitude for location filtering.
10
number
Optional
Longitude for location filtering.
10
integer
Optional
Maximum distance for location filtering.
10
string
Optional
Free-text search query.
example
Request Examples
<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: YOUR_API_KEY_HERE"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
<?php
use Illuminate\Support\Facades\Http;
$response = Http::timeout(30)
->withHeaders(['x-api-key' => 'YOUR_API_KEY_HERE'])
->get('https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2');
if ($response->successful()) {
echo $response->body();
} else {
echo "Error: " . $response->status();
}
const options = {
method: 'GET',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE'
}
};
fetch('https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2', options)
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.text();
})
.then(data => console.log(data))
.catch(error => console.error('Error:', error));
const axios = require('axios');
const options = {
method: 'GET',
url: 'https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2',
headers: {
x-api-key: 'YOUR_API_KEY_HERE',
}
};
try {
const response = await axios(options);
console.log(response.data);
} catch (error) {
console.error('Error:', error.message);
}
require 'net/http'
require 'uri'
uri = URI.parse("https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == 'https'
request = Net::HTTP::Get.new(uri.request_uri)
request['x-api-key'] = 'YOUR_API_KEY_HERE'
begin
response = http.request(request)
puts response.body
rescue => e
puts "Error: #{e.message}"
end
import http.client
import json
conn = http.client.HTTPSConnection("scrappa.co")
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
conn.request("GET", "/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2", headers=headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
except Exception as e:
print(f"Error: {e}")
finally:
conn.close()
import requests
headers = {
'x-api-key': 'YOUR_API_KEY_HERE',
}
try:
response = requests.get('https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2', headers=headers)
response.raise_for_status()
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Error: {e}")
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import java.io.IOException;
public class ApiExample {
public static void main(String[] args) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2")
.addHeader("x-api-key", "YOUR_API_KEY_HERE")
.build();
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
System.out.println(response.body().string());
} else {
System.out.println("Error: " + response.code());
}
} catch (IOException e) {
System.out.println("Error: " + e.getMessage());
}
}
}
package main
import (
"fmt"
"net/http"
"io/ioutil"
)
func main() {
client := &http.Client{}
req, err := http.NewRequest("GET", "https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2", nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("x-api-key", "YOUR_API_KEY_HERE")
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response:", err)
return
}
fmt.Println(string(body))
}
#!/bin/bash
curl -X GET \
-H "x-api-key: YOUR_API_KEY_HERE" \
"https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2"
using System;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("x-api-key", "YOUR_API_KEY_HERE");
try
{
var response = await client.SendAsync(new HttpRequestMessage(HttpMethod.Get, "https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2"));
var content = await response.Content.ReadAsStringAsync();
Console.WriteLine(content);
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
}
}
import axios from 'axios';
async function run(): Promise<void> {
try {
const response = await axios({
method: 'GET',
url: 'https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2',
headers: {
'x-api-key': 'YOUR_API_KEY_HERE',
},
});
console.log(response.data);
} catch (error) {
console.error('Error:', error);
}
}
void run();
use reqwest::Client;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::new();
let response = client
.get("https://scrappa.co/api/bring-a-trailer/v1/auctions/search?auction_status=active&sort=ta&per_page=2")
.header("x-api-key", "YOUR_API_KEY_HERE")
.send()
.await?;
println!("{}", response.text().await?);
Ok(())
}
Response Schema
Example response fields are illustrative; inspect the JSON before integrating.
Example response fields
Scan these fields before integrating.
success
data
meta
{
"success": true,
"data": {
"metadata": {
"found": 1285,
"page": 1,
"per_page": 2,
"max_num_pages": 643,
"has_more": true
},
"listings": [
{
"id": 120648745,
"title": "5k-Mile 2016 Ferrari 488 Spider",
"year": 2016,
"bid_current": 180000,
"bid_currency": "USD",
"bid_count": 13,
"has_reserve": true,
"reserve": null,
"sale_state": null,
"sale_price": null,
"sale_date": null,
"ends_at": "2026-10-12T17:00:00+00:00",
"permalink": "https://bringatrailer.com/listing/2016-ferrari-488-spider-14/",
"lat": "40.7293",
"lon": "-96.7062",
"postal_code": "68512",
"images": [
"https://bringatrailer.com/wp-content/uploads/2026/08/IMG_4273-scaled-copy-2026-09-04-2f8-60070.jpeg?w=470&h=318&crop=1"
],
"comments_count": 14,
"seller_type": "private",
"post_status": "active"
}
]
},
"meta": {
"endpoint_family": "search"
}
}
Errors
Handle these documented responses before retrying or showing customer-facing failures.
HTTP 422
A public parameter is invalid. This response is not billable.
HTTP 404
Bring a Trailer rejected the request. This response is not billable.
HTTP 502
Bring a Trailer returned an unexpected response. This response is not billable.
HTTP 503
Bring a Trailer did not return usable data for this request. This response is not billable.
Generate Code with AI
Copy a ready-made prompt with all the endpoint details, parameters, and example responses. Paste it into ChatGPT, Claude, or any AI assistant to instantly generate working code.
Try It Live
Test this endpoint in our interactive playground with real data.