Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Copart API page →
E-commerce & Marketplaces

Copart API & Scraper

The Copart API returns salvage and insurance auto-auction data as clean JSON.

4 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary search endpoint returns lots with lot number, masked VIN, year, make, model, trim, title, body style, colour, engine and fuel type, and you can pull a lot_detail, lot_images and the yards. It is built for auto-remarketing, parts sourcing and salvage-market analytics that need Copart auction data without a scraper. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

The auction vocabulary: title, odometer, keys and sale status

Copart's own words are what people search for, and several of these fields look like enums but are not. The counts below come from one live 100-lot sample plus targeted filter runs, so you can see how often each value actually turns up rather than only that it exists.

FieldValues measuredWhat it means
title_groupCLEAN TITLE, SALVAGE TITLE, NON-REPAIRABLECopart's normalized bucket. This is the field to group and compare on.
title_typeFree text in dozens of spellings: SALVAGE CERTIFICATE, CERT OF TITLE-SALVAGE, SALVAGE VEHICLE TITLE, PERMIT SALVAGE, CERTIFICATE OF DESTRUCTION, NONREPAIRABLE TITLE, BILL OF SALE - PARTS ONLY, JUNKING CERT OF A VEHICLE, MV907A-PARTS ONLY, IRRECUPERABLEThe issuing state or province's own document name, including French for Quebec lots. Never treat it as an enum.
title_type filterclean, salvage, non_repairableThe only three tokens the search accepts. Each maps to one title_group: clean returned 20 of 20 CLEAN TITLE, non_repairable returned 30 of 30 NON-REPAIRABLE.
odometer_brandACTUAL (25), NOT ACTUAL (8), EXEMPT (1), absent (66), out of 100 lotsThe federal odometer disclosure attached to the reading in odometer, which is miles as a float.
keys_availableYES (87), NO (9), EXEMPT (3), null (1)Whether the yard holds keys for the lot.
sale_statusPURE_SALE (75), ON_APPROVAL (15), MINIMUM_BID (9), NOT_ON_SALE (1)How the lot sells. Lots carrying a real buy-it-now price came back MINIMUM_BID.
vin11 visible characters then six asterisks: 3HGGK5G84FM******Copart masks the last six digits for logged-out visitors. There is no unmasked VIN in this API.
currencyUSD (93), CAD (7)Canadian yards quote CAD. Do not total bids across a mixed result set without checking this field.
vehicle_typeIn responses: SEDAN, SUV, PICKUP, COUPE, MOTORCYCLE, ATV, JET SKI, TRAILERS, INDUSTRIAL EQUIPMENT. As a filter: automobile, motorcycle, atv, boat, bus, construction, trailer, heavy_truck, rvTwo different vocabularies. The returned value is a body style; the filter token is a category.

An unrecognized filter value is ignored rather than rejected. A search with damage set to a nonsense string returned ok true and 36,977 unfiltered Honda lots, with no error and no warning. Validate the tokens you send against the lists above, because a typo silently widens your result set instead of failing.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/copart/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "make": "HONDA",
    "size": 20
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "copart",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1339.6,
    "record_count": 20,
    "bytes": 299105,
    "cache_hit": false,
    "completeness_pct": 0.06,
    "stop_reason": "limit_reached",
    "pagination": {
      "page": 1,
      "size": 20,
      "has_more": true,
      "next_page": 2
    },
    "total_results": 36009,
    "charged_credits": 1,
    "version": "1.0.0"
  },
  "data": {
    "lots": [
      {
        "lot_number": "35132240",
        "vin": "MLHNC5156H5******",
        "year": 2017,
        "make": "HONDA",
        "model": "CBR300",
        "trim": "RA",
        "title": "2017 HONDA CBR300 RA  ",
        "body_style": null,
        "color": "RED",
        "engine": "1",
        "cylinders": "1",
        "fuel_type": "GAS",
        "transmission": null,
        "drive": null,
        "primary_damage": "SIDE",
        "secondary_damage": "TOP/ROOF",
        "title_type": "CERT OF TITLE-SALVAGE",
        "title_group": "SALVAGE TITLE",
        "title_state": "SC",
        "keys_available": "NO",
        "highlights": [
          "Hot Items"
        ],
        "loss_type": "CRASHEDTOYS POWERSPORT AUCTION",
        "odometer": 0,
        "odometer_brand": "NOT ACTUAL",
        "estimated_retail_value": null,
        "current_bid": 275,
        "high_bid": 275,
        "buy_it_now_price": 0,
        "repair_cost": 3970,
        "sale_status": "PURE_SALE",
        "currency": "USD",
        "sale_date": null,
        "sale_date_epoch_ms": null,
        "sale_time": "12:00:00",
        "yard_name": "NJ - SOMERVILLE",
        "yard_number": 841,
        "location_city": "HILLSBOROUGH",
        "location_state": "NJ",
        "location_country": "USA",
        "zip": "08844 4662",
        "latitude": 40.53749,
        "longitude": -74.60609,
        "thumbnail": "https://cs.copart.com/v1/AUTH_svc.pdoc00001/PIX269/6421b0f4-96bf-4804-a1c1-9886544e952f.JPG",
        "vehicle_type": "MOTORCYCLE",
        "url": "https://www.copart.com/lot/35132240/salvage-2017-honda-cbr300-ra-nj-somerville"
      },
      {
        "lot_number": "36532223",
        "vin": "3HGGK5G84FM******",
        "year": 2015,
        "make": "HONDA",
        "model": "FIT",
        "trim": "EX",
        "title": "2015 HONDA FIT EX  ",
        "body_style": null,
        "color": "BLACK",
        "engine": "1.5L  4",
        "cylinders": "4",
        "fuel_type": "GAS",
        "transmission": "MANUAL",
        "drive": "Front-wheel Drive",
        "primary_damage": "FRONT END",
        "secondary_damage": "SIDE",
        "title_type": "SALVAGE CERTIFICATE",
        "title_group": "SALVAGE TITLE",
        "title_state": "SC",
        "keys_available": "YES",
        "highlights": [
          "Hot Items"
        ],
        "loss_type": "MO - ST. LOUIS",
        "odometer": 68039,
        "odometer_brand": "ACTUAL",
        "estimated_retail_value": 15025,
        "current_bid": 325,
        "high_bid": 325,
        "buy_it_now_price": 0,
        "repair_cost": 11782.76,
        "sale_status": "PURE_SALE",
        "currency": "USD",
        "sale_date": null,
        "sale_date_epoch_ms": null,
        "sale_time": "12:00:00",
        "yard_name": "MO - ST. LOUIS",
        "yard_number": 20,
        "location_city": "BRIDGETON",
        "location_state": "MO",
        "location_country": "USA",
        "zip": "63044 1418",
        "latitude": 38.78048,
        "longitude": -90.42381,
        "thumbnail": "https://cs.copart.com/v1/AUTH_svc.pdoc00001/LPP551/17299b608c094704a9ada5928cb599d6_thb.jpg",
        "vehicle_type": "SEDAN",
        "url": "https://www.copart.com/lot/36532223/salvage-2015-honda-fit-ex-mo-st-louis"
      },
      {
        "lot_number": "36892794",
        "vin": "JHMCP26398C******",
        "year": 2008,
        "make": "HONDA",
        "model": "ACCORD",
        "trim": "LX",
        "title": "2008 HONDA ACCORD LX  ",
        "body_style": null,
        "color": "SILVER",
        "engine": "2.4L  4",
        "cylinders": "4",
        "fuel_type": "GAS",
        "transmission": "MANUAL",
        "drive": "Front-wheel Drive",
        "primary_damage": "FRONT END",
        "secondary_damage": null,
        "title_type": null,
        "title_group": null,
        "title_state": null,
        "keys_available": "YES",
        "highlights": null,
        "loss_type": "AZ - PHOENIX NORTH",
        "odometer": 173213,
        "odometer_brand": null,
        "estimated_retail_value": 7550,
        "current_bid": 0,
        "high_bid": 0,
        "buy_it_now_price": 0,
        "repair_cost": 9836.38,
        "sale_status": "PURE_SALE",
        "currency": "USD",
        "sale_date": null,
        "sale_date_epoch_ms": null,
        "sale_time": "12:00:00",
        "yard_name": "AZ - PHOENIX NORTH",
        "yard_number": 362,
        "location_city": "PHOENIX",
        "location_state": "AZ",
        "location_country": "USA",
        "zip": "85085",
        "latitude": 33.70502,
        "longitude": -112.08195,
        "thumbnail": "https://cs.copart.com/v1/AUTH_svc.pdoc00001/lpp/0124/9e6773b657b1487db5c213cd3972cdbc_thb.jpg",
        "vehicle_type": "SEDAN",
        "url": "https://www.copart.com/lot/36892794/2008-honda-accord-lx-az-phoenix-north"
      }
    ]
  }
}
Actions

What the Copart API does

ActionDescriptionConcrete use caseKey params
searchSearch live Copart auction lots by free-text `query` and/or structured filters (make, model, year or year_min/year_max, title_type, vehicle_type, damage, condition, source, odometer_min/max, yard_number). Sortable + paginated. Returns rich lot cards with damage, title, odometer, estimated value, current bid, sale date, location and thumbnail.Pricing teams call search to search live Copart auction lots by free-text `query` and/or structured filters (make, model,….query, make, model, year, year_min, ...
lot_detailFull detail for one lot by `lot_number`: VIN (publicly masked by Copart), make, model, trim, year, primary/secondary damage, title type & group, odometer, color, engine, fuel, drive, transmission, estimated retail value, current/high bid, sale date & time, yard location (city/state/zip/lat/long) and keys availability.Marketplace operators call lot_detail to get full detail for one lot by `lot_number`.lot_number
lot_imagesAll auction photos for one lot by `lot_number`: ordered full-size, hi-res and thumbnail image URLs for the vehicle (exterior, interior, damage, VIN plate, odometer).Catalog enrichment teams call lot_images to get all auction photos for one lot by `lot_number`.lot_number
yardsLive list of Copart yards / locations you can filter `search` by, each with its yard_number and current lot count. Lifted from the live search facet taxonomy — use a yard_number with search's `yard_number` filter to scope to one location.Retail analysts call yards to get live list of Copart yards / locations you can filter `search` by, each with its yard_number a….query
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/copart/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"make":"HONDA","size":20}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.copart.search with {"make":"HONDA","size":20}.
Use cases

Who uses this API and why

  • Auto-remarketing tools call search to find salvage vehicles by make, model and title type.
  • Parts-sourcing products use lot_detail and lot_images to assess a damaged vehicle before bidding.
  • Salvage-market analysts use yards and search to track auction supply by location.
FAQ

Questions developers ask before integrating

Why is sale_date null on most lots?

Because Copart only stamps a date once a lot is assigned to an auction, and freshly listed lots are not. Measured: 92 of 100 lots on a default search, and 100 of 100 sorted by sale date, came back with sale_date and sale_date_epoch_ms both null, while sale_time still carried the yard's usual start (12:00:00 on 68 lots, 10:00:00 on 21). When a date is present it is ISO-8601 with a UTC offset, like 2026-08-27T16:00:00+00:00, with the epoch milliseconds beside it.

Why is title_type null on lots I just searched, and can I still filter by it?

Same reason: the title document is not recorded yet on a newly listed lot, and 82 of 100 default-sorted lots returned both title_type and title_group null. Copart's own index knows more than the card shows, so the filter still works on those lots. A title_type=clean search returned 20 of 20 with title_group CLEAN TITLE, and non_repairable returned 30 of 30 NON-REPAIRABLE. Filter server-side with the parameter instead of post-filtering the field.

What does odometer_brand NOT ACTUAL mean?

It is the odometer disclosure that rides with the reading, not a quality score. ACTUAL means the mileage is certified as the true reading. NOT ACTUAL means it is not, which covers a broken or replaced cluster as well as an unverifiable one. EXEMPT means the vehicle falls outside the disclosure rule by age or weight. This matters when you read the number: a measured motorcycle lot showed odometer 0.0 with odometer_brand NOT ACTUAL, which is an uncertified reading rather than a zero-mile bike.

current_bid, high_bid or buy_it_now_price, which one is the price?

current_bid is the live number, and high_bid matched it on every lot inspected (275.0 and 275.0, then 325.0 and 325.0). buy_it_now_price is 0.0 rather than null when there is no buy-it-now, and it was 0.0 on all 100 lots of a general search. A condition=buy_it_now search returned real ones between 1700 and 12300, all with sale_status MINIMUM_BID. Test buy_it_now_price > 0, not for null.

How do I restrict a search to one Copart location?

Call yards first. It returns all 400 locations with their live lot counts and the exact strings the filters accept. Measured: TX - DALLAS 6,071 lots, TX - DALLAS SOUTH 4,628, AK - ANCHORAGE 450, AB - CALGARY 621. Then pass either yard_number or location. yard_number 357 resolved to TX - HOUSTON EAST with 3,157 lots. The list includes Canadian yards, which is where the CAD lots come from.

What does lot_images give me, and can I tell which photo is the VIN plate?

It gives every photo in order, with three sizes derived from the same key and ending _ful, _hrs and _thb, so you pick the resolution without a second call. Lot 36532223 returned 13 photos. The type field is present but came back UNKNOWN on all 13, so it will not identify the VIN plate or the odometer shot for you. sequence is the only ordering you get.

What is loss_type actually carrying?

The sale it belongs to, not an insurance loss code. Measured values are auction and yard names: 'MO - ST. LOUIS', 'TX - HOUSTON EAST', 'CRASHEDTOYS POWERSPORT AUCTION', 'HEAVY TRUCK SPECIALTY SALE', 'ATLANTIC CANADA AUCTION'. It is often identical to yard_name. For what happened to the vehicle, read primary_damage and secondary_damage, which use Copart's own words (FRONT END, SIDE, WATER/FLOOD, TOP/ROOF). A damage=water_flood search returned WATER/FLOOD on 40 of 40 lots.

How reliable are estimated_retail_value and repair_cost?

They are Copart's own estimates in the lot's currency, not appraisals, and one of them is frequently missing. In the 100-lot sample estimated_retail_value was null on 23 lots while repair_cost was populated on all 100. A measured 2015 Honda Fit lot carried estimated_retail_value 15025.0 against repair_cost 11782.76. Use them for ranking, not for valuation.

What is the Copart API?

Copart API is a ReefAPI endpoint group for copart It returns live JSON through POST requests under /copart/v1.

Is the Copart API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Copart calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Copart login or account?

No login to Copart is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Copart data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Copart API use?

Copart actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call Copart from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call copart actions with the same key, credit pool and JSON envelope used by normal REST requests.

docs / copart

Copart

Copart

base /copart/v14 endpoints
post/copart/v1/lot_detail1 credit

Full detail for one lot by `lot_number`: VIN (publicly masked by Copart), make, model, trim, year, primary/secondary damage, title type & group, odometer, color, engine, fuel, drive, transmission, estimated retail value, current/high bid, sale date & time, yard location (city/state/zip/lat/long) and keys availability.

ParameterAllowed / rangeDescription
lot_numberrequired—Copart lot number — the digits in a copart.com/lot/ URL or a search result's lot_number.
Try in playground →
post/copart/v1/lot_images1 credit

All auction photos for one lot by `lot_number`: ordered full-size, hi-res and thumbnail image URLs for the vehicle (exterior, interior, damage, VIN plate, odometer).

ParameterAllowed / rangeDescription
lot_numberrequired—Copart lot number to fetch photos for.
Try in playground →
post/copart/v1/yards1 credit

Live list of Copart yards / locations you can filter `search` by, each with its yard_number and current lot count. Lifted from the live search facet taxonomy — use a yard_number with search's `yard_number` filter to scope to one location.

ParameterAllowed / rangeDescription
queryoptional—Optional name filter (case-insensitive substring) to find a yard, e.g. 'dallas', 'ca -', 'houston'.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.