Read live IAAI salvage lots across the US and Canada
IAAI is the second of the two big US salvage houses, and this API is the matching half of our Copart API — the same field names for the same things, so a lot from either house lands in the same table.
5 active endpoints. Every call is 1 credit.
- POST/iaai/v1/search
- POST/iaai/v1/lot_detail
- POST/iaai/v1/lot_images
- POST/iaai/v1/branches
- POST/iaai/v1/filters
What IAAI endpoints does ReefAPI ship?
5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
IAAI API
3 of 5 endpoints, ready to run
Live lots with the masked VIN, both damage fields, the title document and its state, the odometer and its brand, the actual cash value, the auction date and the branch — filtered by any of 25 attributes, including the buyer licence a lot requires.
// 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 IAAI API works
IAAI 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 280 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.
Build an export shortlist that clears customs and closes this week
Buying salvage from outside the US fails on two things long before it fails on price: the lot turns out to need a licence you do not hold, or the paperwork is a document your customs authority will not accept. So the walk starts from the licence and the title, not from the car.
{"who_can_buy": "exporter", "title_type": "salvage", "size": 50}68,866 lots are open to exporters; adding the title document narrows it to paperwork you can actually import against. Every row arrives with the masked VIN, both damage fields, the odometer and its brand, the actual cash value and the auction date.
{"group": "BranchName", "who_can_buy": "exporter"}The same query counted by branch, so you can see where the exporter-eligible stock actually sits before you price freight. Pass any name straight back as the branch filter.
{"lot_number": "<id from a search row>", "include_images": true}The full record and every photograph at native resolution in one call — the damage classification, the vehicle grade and the lane and aisle, plus the branch coordinates for the freight quote.
A shortlist filtered to lots you are licensed to buy, with paperwork you can import, sorted by the sale that closes first, each with a photographed damage record and a branch you can quote freight against.
curl -X POST https://api.reefapi.com/iaai/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"make":"TOYOTA","size":25}'{
"ok": true,
"data": { … },
"meta": {
"api": "iaai",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}The five fields that decide whether a salvage lot is worth bidding on
Salvage buying turns on a handful of fields, and on IAAI several of them are free text rather than the enum they look like. The counts come from a live sample of 25 lots in each of seven categories plus targeted filter runs, so you can see how often each field actually arrives rather than only that it exists.
| Field | What comes back | What it means |
|---|---|---|
| title_type | The issuing state's own document name — CLEAR (Pennsylvania), SALVAGE, NON-REPAIRABLE, PartsOnly, Repairable, Bill Of Sale, None | The search filter accepts seven tokens, but the value returned is the state's wording with the state in brackets. Filter on the token, group on it, but never parse it as an enum. |
| odometer / odometer_brand | An integer in miles plus ACTUAL, NOT ACTUAL or EXEMPT. Present on 25 of 25 cars and SUVs, 24 of 25 motorcycles and heavy trucks, but only 7 of 25 trailers and 2 of 5 boats | The federal odometer disclosure attached to the reading. IAAI does not record mileage for most towed or floating inventory, so a null there is the source being silent, not a gap in the parse. |
| primary_damage / secondary_damage | 52 published values — Front End, All Over, Rear, Left Side, Water/Flood, Total Burn, Normal Wear & Tear, Vandalized, Mechanical and more. primary_damage on 25 of 25 in every category | The damage classification the auction assigns. secondary_damage is frequently blank, which means IAAI recorded only one point of damage. |
| estimated_retail_value | The auction's actual cash value in dollars. 21 of 25 cars, 22 of 25 SUVs, 25 of 25 vans, but 13 of 25 heavy trucks | IAAI's own pre-loss valuation. Where it is null the auction simply did not publish one — it is not a zero. |
| who_can_buy | An array from DEA, DIS, EXP, LBU, REB, SCR — dealer, dismantler, exporter, licensed business, rebuilder, scrapper. 68,866 lots are open to exporters | The licence a buyer needs. If you are buying from outside the US this is the first filter to apply, not the last. |
| current_bid | Always null | IAAI publishes the bid count but not the bid amount to a signed-out visitor. We return null rather than a guess. buy_it_now_price, minimum_bid, bid_increment and pre_bid_count are published and do come back. |
Two countries, 849 branches, and the one number IAAI will not show you
Measured against the live engine across seven vehicle categories and 27 filter runs. The first row decides whether this engine fits your product at all, so it goes first.
IAAI does not publish the current high bid to a signed-out visitor, so current_bid is null on all 180 lots we sampled and will be null on yours. IAAI prints how many people are pre-bidding but not what they bid, and we return that count rather than inventing an amount. What is published and does come back: a real buy-now price on 20,705 lots, the minimum bid, and the $25 bid increment. If your product is a live bid tracker, this API cannot be its source. Our Copart API does return a current bid, which is a genuine difference between the two houses rather than between the two engines.
Every lot carried a VIN and every one of them ended in six asterisks. That is what IAAI publishes to a visitor who is not signed in, and we do not sign in. The first eleven characters are the manufacturer, model year, plant and descriptor section, which decodes and disambiguates a model but will not run a title-history check. Copart masks it the same way; no engine on this site will give you the last six.
The live index held 358,763 lots when we measured: 345,742 in IAA United States, 4,666 in IAA Canada and 8,355 through Ritchie Bros. The branch directory returns all 849 locations with a current lot count on each. Canadian lots use their own id format, carry CAD, and are returned and resolved by the same calls as US lots.
Field coverage is not uniform across categories and the averages hide it, so here is the breakdown. Cars, SUVs and vans fill almost everything: VIN, year, make, model, damage, auction date and branch on 25 of 25, odometer on 25 of 25, actual cash value on 21 to 25 of 25. Trailers carry no trim at all, 0 of 25, and an odometer on only 7 of 25. Heavy trucks publish an actual cash value on 13 of 25. Boats are a real category but a tiny one — IAAI listed exactly 5 the day we measured, with no trim on any and an odometer on 2. Motorcycles behave like cars.
Against the unfiltered 358,763: front-end damage 115,262, salvage title 87,572, run-and-drive 215,243, deployed airbags 96,027, all-wheel drive 71,150, exporter-eligible 68,866, 2018 to 2022 98,293, under 50,000 miles 106,678, eight cylinders 37,707, Texas 40,792, Japan-built 36,274, buy-now 20,705, motorcycles 8,542, electric 6,277, manual 6,935, flood or water loss 6,913, Canada 4,666, one branch 768, one trim 697. Twenty-five filters, every one of them measured before it was published. Filters IAAI accepted and then ignored were left out of the API rather than shipped.
The engine-size taxonomy publishes 2.0L with no space alongside 2.5 L and 1.5 L with one. There is no canonical form to normalise to, so we pass IAAI's string through exactly as published — which means engine_size="2.0 L" returns nothing while "2.0L" returns 52,542 lots. Take the string from the filters action rather than typing it, and this stops being a problem.
A lot returned 22 photographs, each with its own pixel dimensions — 2576 by 1932 on the set we checked — as a full-size and a thumbnail URL, plus the 360-degree viewer link where IAAI publishes one. Passing include_images to lot_detail returns them alongside the record instead of costing a second call.
Six ids taken from a search were resolved individually and all six came back as the same record, matching on both the item id and the Stock #, with the id types stable between the two calls. Paging is a real offset too: pages 1 and 2 of one query shared zero lots.
IAAI puts the seller behind a buyer login, so seller and seller_type are null on every lot and there is nothing personal on the signed-out surface to return. The branch telephone and street address belong to the auction site rather than to a person, and they are returned only if you ask for them explicitly.
What people build with IAAI
The jobs this data is most often used for.
endpoints
credit per call
Price a rebuild before you bid: pull the lots for a make and damage type with the odometer, its ACTUAL or NOT-ACTUAL brand, the title document, the actual cash value and every photograph, and build a repair estimate from the damage classification rather than from a thumbnail.
Import vehicles into another country: filter to who_can_buy=exporter across 68,866 eligible lots, add a title document filter so you only see paperwork your customs authority accepts, and sort by auction date so you bid in the order the sales actually close.
Cover both salvage houses in one product: run the same query against this API and our Copart API and merge the results without a mapping layer, because the field names match on both sides.
Source parts by damage: search on primary damage and start code to find cars wrecked at one end with an intact drivetrain, scope it to the branches within your freight radius using the live per-branch lot counts, and read the engine, cylinder count and drive type off each record.
What IAAI 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 280 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/iaai/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"make":"TOYOTA","size":25}'import requests
r = requests.post(
"https://api.reefapi.com/iaai/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"make": "TOYOTA",
"size": 25
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up IAAI.
Get a free key →Does the IAAI API return the current bid?▾
No, and no signed-out source can. IAAI shows a signed-out visitor how many people are pre-bidding but not what they have bid, so current_bid is null on every lot we return. What you do get is the buy-now price where the lot has one — 20,705 lots carry a real buy-now amount — plus the minimum bid, the $25 bid increment and pre_bid_count, the number of bidders IAAI itself prints. If your product needs a live high bid, this API will not supply it and neither will scraping the page yourself.
Is the VIN complete?▾
No. IAAI masks the last six characters for signed-out visitors, exactly as Copart does, so every VIN comes back in the form JTDKDTB32D1 followed by six asterisks. The first eleven characters still decode the manufacturer, model year, plant and descriptor section, which is enough to identify and disambiguate a vehicle but not enough to run a title-history check. A vin_status field tells you whether IAAI flags the VIN as OK.
How do I find the exact make, model or branch string a filter wants?▾
Call the filters action. IAAI publishes 1,785 makes, 6,311 models, 10,180 series and 849 branches, far too many to document, and it returns a live lot count beside every value. Pass any search filter alongside it and the counts narrow to that query — group=Model with make=TOYOTA lists only Toyota models and how many of each are up right now. This matters because IAAI's own spellings are not always tidy: the engine-size taxonomy publishes 2.0L without a space and 2.5 L with one, so taking the string from filters is the only reliable way to get a hit.
Does it cover Canada as well as the United States?▾
Yes. 345,742 lots sit in IAA United States, 4,666 in IAA Canada and 8,355 come through Ritchie Bros., and the market filter selects between them. Canadian lots carry their own id format and a CAD currency on the record, and they are returned by the same search and resolved by the same lot_detail call as US lots.
How are IAAI lots numbered, and which number do I store?▾
IAAI carries two numbers that are not the same and are easy to confuse. The Stock # it displays is one number; the item id in its own URLs is another. Store lot_number — that is the item id, and it is the one lot_detail resolves. stock_number comes back on the same record so you can show the number a buyer will recognise. Keep lot_id if you work across both countries, since it carries the country suffix.
Do the filters actually narrow the results, or are they ignored?▾
All 25 of them narrow it, and we publish the proof: against an unfiltered index of 358,763 lots, front-end damage returns 115,262, salvage titles 87,572, motorcycles 8,542, electric vehicles 6,277, manual transmissions 6,935 and a single branch 768. Any filter IAAI accepted but quietly ignored was left out of this API rather than exposed.
How deep does paging go?▾
25 to 100 lots a page and IAAI stops at page 500. Anything under 25 is clamped up to 25 by the source, so the API will not promise you a smaller page than it can deliver. Consecutive pages share no lots — pages 1 and 2 of the same query overlapped on zero ids when we measured it.
Does it return seller names or personal contact details?▾
No. IAAI gates the seller behind a buyer login, so seller and seller_type are null on every lot — there is no personal data on the signed-out surface to return. The branch telephone number and street address are business contact details for the auction site itself, and they are returned only when you explicitly ask for them.
What is the IAAI API?▾
IAAI API is a ReefAPI endpoint group for us and canadian salvage auction lots, damage and title. It returns live JSON through POST requests under /iaai/v1.
Is the IAAI API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. IAAI calls use the same shared credit balance as every other ReefAPI engine.
Do I need an IAAI login or account?▾
No login to IAAI 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 IAAI 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 IAAI API use?▾
IAAI actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call IAAI from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call iaai actions with the same key, credit pool and JSON envelope used by normal REST requests.
116 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling IAAI, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
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 279 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. Field notes were captured on 2026-09-23.