Source API · Copart and IAAI · USA

# Copart and IAAI API — US auction lots as JSON

Copart and IAAI are the two largest US auctions of damaged, insurance and used cars. apiauto.space returns lots of both auctions with sales ahead in one record: VIN, damage, title type, bid and buy-now price, sale date, yard and photos. Lots that are not in our copy of the catalog are found by live search: it asks the auction data provider at request time — on the Pro and Max plans.

- **Source**: copart.com · iaai.com · market=us
- **Region**: USA
- **Data**: Lots, bids, damage, photos
- **Status**: Running · refreshed hourly

## What a lot record holds

The same keys in every market; on the right, the values of two real lots from the catalog: Copart above, IAAI below. What the auction does not give comes as null, never a guess.

### Lot

- `title` Year, make and model in one line `"2019 Mercedes-Benz Sprinter"` `"2021 Alfa Romeo Giulia"`
- `vin` The lot's VIN `"WD4PF1CDXKP120163"` `"ZARFANBN5M7644416"`
- `year` Model year `2019` `2021`
- `mileage_km` Mileage in kilometres `172294` `96536`
- `raw.odometer_mi` Mileage in miles, as the auction gives it `107059` `59985`
- `raw.lot_number` Lot number `"74596366"` `"46070355"`

### Sale and price

- `raw.sale_date` Sale date and time, UTC `"2026-11-09T17:00:00+00:00"` `"2026-11-09T14:30:00+00:00"`
- `raw.bid` Current bid, when the auction gave one `null` `25`
- `raw.buy_now` Buy-now price `21800` `4500`
- `price` Buy-now, or the final bid once sold; otherwise null. A bid is not a price `21800.00 USD` `4500.00 USD`

### Condition

- `raw.damage_main` Main damage `"normal_wear"` `"front"`
- `raw.damage_second` Secondary damage `null` `"mechanical"`
- `raw.title_doc` Title type `"clean"` `"salvage"`
- `raw.keys_available` Whether the keys are there `true` `true`
- `raw.source_values.damage_main` The auction's own wording `"Normal wear"` `"Front end"`

### Car

- `fuel` Fuel, a canonical value `"diesel"` `"gasoline"`
- `transmission` Gearbox `"automatic"` `"automatic"`
- `engine_cc` Engine size, cc `3000` `2000`
- `raw.source_values.engine` The auction's engine line `"3.0L 6"` `"2.0L I-4 DI, VVT, turbo, premium…`
- `color` Colour `"Black"` `"Black"`
- `raw.drive` Drive `"rwd"` `"awd"`

### Yard and photos

- `location.region` State `"NJ"` `"KY"`
- `location.city` The yard's city `"Glassboro"` `"Louisville North"`
- `raw.location_branch` The auction yard `"NJ - GLASSBORO WEST"` `"Louisville North"`
- `photo_count` Photos of the lot `13` `17`
- `photos.0` A signed link, valid for about a day `"api.apiauto.space/img/copart:745…` `"api.apiauto.space/img/iaai:46070…`

### Not from the auction

- `listing_url` No link to the lot `null` `null`
- `raw.final_bid` No final price: only sales ahead `null` `null`
- `raw.estimate_repair_price` A repair estimate only when the auction gave one `null` `null`

copart:74596366 2019 Mercedes-Benz Sprinter · 172,294 km

iaai:46070355 2021 Alfa Romeo Giulia · 96,536 km

## Request and response

The four requests people usually start with. The key goes in the X-API-Key header; the answer is JSON.

A page of cars by filters and the next page's cursor

GET

`https://api.apiauto.space/v1/cars?market=us&limit=2`

cURL:

```bash
curl -s "https://api.apiauto.space/v1/cars?market=us&limit=2" \
  -H "X-API-Key: $APIAUTO_KEY"
```

JavaScript:

```js
const response = await fetch(
  "https://api.apiauto.space/v1/cars?market=us&limit=2",
  { headers: { "X-API-Key": process.env.APIAUTO_KEY } },
);
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
const data = await response.json();
```

Python:

```python
import os
import httpx

data = httpx.get(
    "https://api.apiauto.space/v1/cars?market=us&limit=2",
    headers={"X-API-Key": os.environ["APIAUTO_KEY"]},
    timeout=30,
).raise_for_status().json()
```

PHP:

```php
<?php
$ch = curl_init("https://api.apiauto.space/v1/cars?market=us&limit=2");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => ["X-API-Key: " . getenv("APIAUTO_KEY")],
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
```

200 OK · sample response:

```json
{
  "items": [
    {
      "id": "copart:74596366",
      "market": "us",
      "source": "copart",
      "source_id": "74596366",
      "title": "2019 Mercedes-Benz Sprinter",
      "brand": "Mercedes-Benz",
      "model": "Sprinter",
      "generation": null,
      "trim": null,
      "year": 2019,
      "mileage_km": 172294,
      "fuel": "diesel",
      "transmission": "automatic",
      "engine_cc": 3000,
      "body_type": "minivan",
      "color": "Black",
      "vin": "WD4PF1CDXKP120163",
      "price": {
        "amount": "21800.00",
        "currency": "USD"
      },
      "price_usd": "21800.00",
      "location": {
        "country": "US",
        "region": "NJ",
        "city": "Glassboro"
      },
      "photos": [
        "https://api.apiauto.space/img/copart:74596366/1.jpg?exp=…&sig=…",
        "https://api.apiauto.space/img/copart:74596366/2.jpg?exp=…&sig=…"
      ],
      "photo_count": 13,
      "listing_url": null,
      "is_active": true,
      "first_seen_at": "2026-11-03T04:44:39.124066Z",
      "last_seen_at": "2026-11-03T04:44:39.124066Z",
      "disappeared_at": null,
      "updated_at": "2026-11-03T04:44:39.124066Z",
      "raw": {
        "fx": {
          "date": "2026-11-02",
          "source": "ECB",
          "currency": "USD",
          "usd_per_unit": "1"
        },
        "bid": null,
        "drive": "rwd",
        "status": 3,
        "airbags": null,
        "buy_now": 21800,
        "latitude": 39.68909,
        "condition": null,
        "cylinders": 6,
        "final_bid": null,
        "longitude": -75.13209,
        "sale_date": "2026-11-09T17:00:00+00:00",
        "title_doc": "clean",
        "video_url": null,
        "grade_iaai": null,
        "lot_number": "74596366",
        "damage_main": "normal_wear",
        "odometer_mi": 107059,
        "damage_second": null,
        "source_values": {
          "fuel": "1",
          "trim": null,
          "brand": "MERCEDES-BENZ",
          "drive": "1",
          "model": "SPRINTER",
          "engine": "3.0L 6",
          "body_type": "Van passenger",
          "title_doc": "CERT OF TITLE",
          "damage_main": "Normal wear",
          "transmission": "1",
          "damage_second": null
        },
        "keys_available": true,
        "location_branch": "NJ - GLASSBORO WEST",
        "odometer_status": null,
        "pre_accident_price": null,
        "clean_wholesale_price": null,
        "estimate_repair_price": null
      },
      "source_mode": "replica"
    },
    {
      "id": "iaai:46070355",
      "market": "us",
      "source": "iaai",
      "source_id": "46070355",
      "title": "2021 Alfa Romeo Giulia",
      "brand": "Alfa Romeo",
      "model": "Giulia",
      "generation": null,
      "trim": null,
      "year": 2021,
      "mileage_km": 96536,
      "fuel": "gasoline",
      "transmission": "automatic",
      "engine_cc": 2000,
      "body_type": "sedan",
      "color": "Black",
      "vin": "ZARFANBN5M7644416",
      "price": {
        "amount": "4500.00",
        "currency": "USD"
      },
      "price_usd": "4500.00",
      "location": {
        "country": "US",
        "region": "KY",
        "city": "Louisville North"
      },
      "photos": [
        "https://api.apiauto.space/img/iaai:46070355/1.jpg?exp=…&sig=…",
        "https://api.apiauto.space/img/iaai:46070355/2.jpg?exp=…&sig=…"
      ],
      "photo_count": 17,
      "listing_url": null,
      "is_active": true,
      "first_seen_at": "2026-11-03T00:32:38.013200Z",
      "last_seen_at": "2026-11-03T04:31:44.032962Z",
      "disappeared_at": null,
      "updated_at": "2026-11-03T04:31:44.032962Z",
      "raw": {
        "fx": {
          "date": "2026-11-02",
          "source": "ECB",
          "currency": "USD",
          "usd_per_unit": "1"
        },
        "bid": 25,
        "drive": "awd",
        "status": 3,
        "airbags": 2,
        "buy_now": 4500,
        "latitude": 38.37074,
        "condition": null,
        "cylinders": 4,
        "final_bid": null,
        "longitude": -85.19097,
        "sale_date": "2026-11-09T14:30:00+00:00",
        "title_doc": "salvage",
        "video_url": null,
        "grade_iaai": null,
        "lot_number": "46070355",
        "damage_main": "front",
        "odometer_mi": 59985,
        "damage_second": "mechanical",
        "source_values": {
          "fuel": "4",
          "trim": null,
          "brand": "ALFA ROMEO",
          "drive": "3",
          "model": "GIULIA",
          "engine": "2.0L I-4 DI, VVT, turbo, premium , 280HP",
          "body_type": "Sedan",
          "title_doc": "SALVAGE",
          "damage_main": "Front end",
          "transmission": "1",
          "damage_second": "Mechanical"
        },
        "keys_available": true,
        "location_branch": "Louisville North",
        "odometer_status": null,
        "pre_accident_price": null,
        "clean_wholesale_price": null,
        "estimate_repair_price": null
      },
      "source_mode": "replica"
    }
  ],
  "next_cursor": "…",
  "count": null
}
```

The cars in the responses are real, from the catalog when the site was built; photos are cut to two and event ids are made up.

## Build a request

Pick filters and the address and code build themselves. The market is fixed: market=us returns Copart and IAAI lots together; the auction is in the source field.

GET

`https://api.apiauto.space/v1/cars?market=us&brand=Toyota&limit=20`

cURL:

```bash
curl -s "https://api.apiauto.space/v1/cars?market=us&brand=Toyota&limit=20" \
  -H "X-API-Key: $APIAUTO_KEY"
```

JavaScript:

```js
const response = await fetch(
  "https://api.apiauto.space/v1/cars?market=us&brand=Toyota&limit=20",
  { headers: { "X-API-Key": process.env.APIAUTO_KEY } },
);
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);
const data = await response.json();
```

Python:

```python
import os
import httpx

data = httpx.get(
    "https://api.apiauto.space/v1/cars?market=us&brand=Toyota&limit=20",
    headers={"X-API-Key": os.environ["APIAUTO_KEY"]},
    timeout=30,
).raise_for_status().json()
```

PHP:

```php
<?php
$ch = curl_init("https://api.apiauto.space/v1/cars?market=us&brand=Toyota&limit=20");
curl_setopt_array($ch, [
    CURLOPT_HTTPHEADER => ["X-API-Key: " . getenv("APIAUTO_KEY")],
    CURLOPT_RETURNTRANSFER => true,
]);
$data = json_decode(curl_exec($ch), true);
```

## Use cases

1. **Finding a US car for a client** — 01 Finding a US car for a clientA manager searches lots by make, year and budget and sends the client the VIN, damage, sale date and photos. Method`GET /v1/cars?market=us&brand=…`
2. **A landed-cost calculator** — 02 A landed-cost calculatorBid, buy-now price, state and yard of the lot — all you need to count shipping and customs on your side. Method`GET /v1/cars/{id}`
3. **New lots in a Telegram channel** — 03 New lots in a Telegram channelThe added feed brings fresh lots with sales ahead — the bot posts them with photos. Method`GET /v1/changes?market=us&type=added`
4. **Search beyond the copy** — 04 Search beyond the copyWhen a lot is not in the copy, live search looks for it right at the auction data provider — on the Pro and Max plans. Method`GET /v1/us/live?make=…`

## About the source

The auctions' fields, the makes in the catalog, live search, the feed and the limits of the US data.

### Auction fields in raw

| Field | Meaning |
| --- | --- |
| `sale_date` | Auction date and time, UTC. |
| `bid`, `buy_now` | The current bid and the buy-now price. |
| `damage_main`, `damage_second` | Primary and secondary damage: front, rear, normal_wear… |
| `title_doc` | Title type: clean and others; the original line is in `source_values`. |
| `odometer_mi`, `odometer_status` | Mileage in miles as the auction gives it, and its status. |
| `keys_available` | Whether keys are present. |
| `lot_number`, `location_branch` | Lot number and auction yard. |
| `drive`, `cylinders` | Drive and cylinder count. |
| `pre_accident_price`, `clean_wholesale_price`, `estimate_repair_price` | Value and repair estimates, when the auction gives them. |
| `video_url` | The lot's video, if any. |

### Auction makes in the catalog

The most frequent makes:

| Make | Cars in the catalog |
| --- | --- |
| Toyota | 8,373 |
| Ford | 7,184 |
| Honda | 6,710 |
| Chevrolet | 6,469 |
| Nissan | 5,776 |
| Hyundai | 4,686 |
| Kia | 3,784 |
| Jeep | 3,206 |
| Mercedes-Benz | 2,828 |
| BMW | 2,578 |
| Subaru | 2,381 |
| Dodge | 2,086 |

The full list is `GET /v1/references/brands?market=us`, free.

### Live search beyond the copy

`GET /v1/us/live` searches lots straight at the auction data provider — for cars that are not in the copy. Parameters: `make`, `model`, `year_min`, `year_max`, `price_max`, `page`. Live search has its own monthly counter: Pro — 2,000 requests, Max — 10,000. When the provider is down, the answer is 503 with `retry_after`.

### New lots and finished auctions

The feed `GET /v1/changes?market=us` returns new lots (`added`), lots whose auction has passed (`disappeared`) and price changes. After the auction a lot gets `is_active=false` and stays in the API for 14 more days.

### US data boundaries

- Only lots with auctions ahead. No archive of past auctions, final prices or sale history.
- The API only reads data: bids are placed at the auction, through a member or broker account.
- Body type is missing on some lots, and there is no lot link.
- The age of the copy comes in the `X-Data-Age-Seconds` header of every answer.

## Frequently asked questions

### 01Is this the official Copart or IAAI API?

No. apiauto.space is not affiliated with Copart or IAAI. We serve a copy of upcoming lots in our own single format — the same as for Encar and Che168.

### 02Is there sale history or final prices?

No. The copy holds only lots whose auctions are still ahead; after the auction a lot turns inactive and leaves after 14 days. We do not sell the sales archive.

### 03Can I bid through the API?

No, the API is read-only. Bids are placed at the auction, through a member or broker account.

### 04Does it fit a Telegram bot with US lots?

Yes: the bot's server queries /v1/cars?market=us with filters and learns about new lots from the /v1/changes feed. Keep the key on the bot's server.

### 05How much does the Copart and IAAI API cost?

The Start plan is $59 a month for one market, e.g. the USA only: 100,000 cars a month. Live search comes with Pro ($149, 2,000 requests) and Max ($299, 10,000). The demo is one day and 100 requests, free.

## Other APIs and guides

- [Source API **Copart API**](https://apiauto.space/en/copart-api/)
- [Source API **IAAI API**](https://apiauto.space/en/iaai-api/)
- [Source API **Encar API**](https://apiauto.space/en/encar-api/)
- [Source API **Che168 API**](https://apiauto.space/en/che168-api/)
- [Guide **A used-car catalog for an importer's site**](https://apiauto.space/en/importers/)
- [Developers **Documentation**](https://apiauto.space/en/docs/)

## Get a Copart and IAAI test key

- One day and 100 requests free, no card
- All three markets and the change feed: compare the USA with Korea and China
- The key arrives in Telegram within a minute — no forms, no calls

---

Page: https://apiauto.space/en/copart-iaai-api/
