Get Copart data with one API
The Copart API returns salvage and insurance auto-auction data as clean JSON.
4 active endpoints. Every call is 1 credit.
- POST/copart/v1/search
- POST/copart/v1/lot_detail
- POST/copart/v1/lot_images
- POST/copart/v1/yards
What Copart endpoints does ReefAPI ship?
4 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Copart API
3 of 4 endpoints, ready to run
Search live Copart auction lots by free-text query and/or structured filters (make, model, ye…
// Press "Try it" and this pane shows exactly what the // live site returned this second — including an empty // result, if that is the truth. No key, no account.
How the Copart API works
Copart is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 185 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
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.
| Field | Values measured | What it means |
|---|---|---|
| title_group | CLEAN TITLE, SALVAGE TITLE, NON-REPAIRABLE | Copart's normalized bucket. This is the field to group and compare on. |
| title_type | Free 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, IRRECUPERABLE | The issuing state or province's own document name, including French for Quebec lots. Never treat it as an enum. |
| title_type filter | clean, salvage, non_repairable | The 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_brand | ACTUAL (25), NOT ACTUAL (8), EXEMPT (1), absent (66), out of 100 lots | The federal odometer disclosure attached to the reading in odometer, which is miles as a float. |
| keys_available | YES (87), NO (9), EXEMPT (3), null (1) | Whether the yard holds keys for the lot. |
| sale_status | PURE_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. |
| vin | 11 visible characters then six asterisks: 3HGGK5G84FM****** | Copart masks the last six digits for logged-out visitors. There is no unmasked VIN in this API. |
| currency | USD (93), CAD (7) | Canadian yards quote CAD. Do not total bids across a mixed result set without checking this field. |
| vehicle_type | In responses: SEDAN, SUV, PICKUP, COUPE, MOTORCYCLE, ATV, JET SKI, TRAILERS, INDUSTRIAL EQUIPMENT. As a filter: automobile, motorcycle, atv, boat, bus, construction, trailer, heavy_truck, rv | Two 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.
What people build with Copart
The jobs this data is most often used for.
endpoints
credit per call
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.
What Copart data costs
The cheapest call here is 1 credit, so $15/mo (Pro) buys 10,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 185 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
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}'import requests
r = requests.post(
"https://api.reefapi.com/copart/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"make": "HONDA",
"size": 20
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Copart.
Get a free key →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, and 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.
37 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Copart, you are one call away from the rest of the category — no second contract, no second integration.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 184 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts.