IAAI API: getting Insurance Auto Auctions data into your app
IAAI API guide: stock numbers vs item IDs, branches, Run & Drive labels, timed auctions, Buy Now, real requests and one JSON schema shared with Copart.

An IAAI API, in the sense of a public feed of Insurance Auto Auctions inventory that any developer can query with a key, is not something IAAI offers. IAAI's systems face its buyers (the website, the app, broker accounts) and its sellers (insurers and fleets that send vehicles in). To get IAAI lots, photos, bids and final prices into your own app as JSON, you collect them or use a data provider that keeps a normalised copy.
The work that follows is mostly about translation. IAAI has its own vocabulary: stock numbers and item IDs, branches and offsite vehicles, start codes such as Run & Drive, timed auctions next to live ones. If you already handle Copart, most of it maps onto the same fields, and a few things do not.
This guide walks through those IAAI-specific concepts, shows where each one lands in a JSON record, and gives working requests for listing, lookups and branches.
Key takeaways
- IAAI does not run an open data API for third parties; its integrations serve its own buyers and sellers.
- IAAI has two identifiers per listing: the stock number buyers type and the item ID in the page URL. Store both.
- Start codes, damage names and title wording differ from Copart's; normalise them into one set of values before you build filters.
- Timed auctions and Buy Now lots need their own price display, and a seller reserve is never what a car sold for.
- With one schema for both auctions, the source lives on each lot, so read it there rather than assuming it from your query.
Does IAAI have a public API?
Not one you can sign up for as a developer who wants the inventory. As far as public information shows, IAAI's integrations exist for the businesses it works with: insurance carriers and other sellers who assign vehicles, and registered buyers and brokers who bid through its site and apps. IAAI has been part of RB Global (the former Ritchie Bros.) since 2023, and its public site at iaai.com remains the way buyers see the inventory.
Like Copart, IAAI's terms of use limit automated collection. If you are about to write a crawler, read them first, and read our engineering breakdown in Scraping Copart yourself vs using an API: everything there applies to IAAI too, with a second set of page layouts to maintain.
What people want from an IAAI API is usually the same short list: every active listing with its photos, damage, title, odometer and start code; the current bid and Buy Now while it is for sale; the final price once it sells; and the history of a VIN across earlier sales. Importers quoting clients in Eastern Europe or the Gulf add one more: the branch, because inland transport to the port is part of the price.
IAAI terms a developer has to learn
IAAI's listing page uses its own names for things. Here is what each one means and which field carries it in the AuctionsAPI vehicle object (the same object Copart lots use).
| On IAAI | What it means | Field |
|---|---|---|
| Stock # | The listing number buyers search for and quote to brokers. | lots[].lot |
| Item ID (in the page URL) | IAAI's internal listing id; it is what you see in a copied link. | lots[].external_id |
| Branch | The IAAI facility that sells the vehicle. | lots[].selling_branch |
| Offsite | The car sits somewhere else (a body shop, a lot), not at the branch. | lots[].location.is_offsite, .offsite |
| Start code (Run & Drive, Starts, Stationary) | What the yard observed at check-in. Not a warranty. | lots[].condition |
| Primary / secondary damage | Where the damage is. | lots[].damage.main, .second |
| Title / sale document | State and document type, such as a salvage certificate. | lots[].title, .detailed_title |
| ACV, repair estimate | Valuations IAAI publishes for some lots. | actual_cash_value, estimate_repair_price |
| Seller | Often an insurance company; sometimes a rental fleet or lender. | lots[].seller, seller_type |
| Buy Now | Fixed price to take the car before the auction. | lots[].buy_now |
| Timed auction | Bidding over a set window that closes at a set time. | is_timed_auction, timed_start_bid, auction_type |
| Airbags, keys | Deployed or intact airbags; key present or not. | lots[].airbags, keys_available |
Stock number vs item ID
This trips up almost every IAAI integration. A buyer says "stock 41872206". A link they paste ends in a different number, the item ID. Both identify the same listing, and your lookup has to accept either. Store the stock number in your lot column and the item ID next to it; index on source plus stock number.
Branches and offsite cars
Transport quotes start at the branch, so it matters more than it looks. The /usa/branches?domain_id=1 dictionary lists IAAI branches with a name, number and link; selling_branch on each lot points to one. When location.is_offsite is true, the car is not physically at that branch, and a carrier needs the actual address before quoting.
An IAAI record, field by field
Here is a trimmed vehicle with one IAAI lot. Values are made up; field names are exactly those in the OpenAPI contract.
- Stock #
- 41872206
- Branch
- Dallas (TX)
- Start code
- Starts
- Damage
- Front End / Left Side
- Title
- Salvage Certificate
- Odometer
- 31,889 mi (actual)
- Auction
- Timed, closes Oct 9
- Current bid
- $6,250
Three details in that record are easy to mishandle. seller_reserve: null means no reserve in the data, not a reserve of zero and not a no-reserve sale. buy_now: null and buy_now: 0 both mean there is no Buy Now. And condition id 0 is a real value (run and drives), so never test it with a truthiness check.
IAAI API requests: listing, lookups, branches
IAAI is source 1 (iaai_com) in every request. Send the key in the x-api-key header; the base URL is https://auctionsapi.com/api.
Active IAAI lots with filters
Upcoming sales are next_hours_auction=48 (sale date between now and 48 hours ahead). Damage is a text filter: damage=Front End matches primary or secondary damage, but only if the text exists in /usa/damages; otherwise the filter is silently skipped and you get everything. Validate it first.
Look up by stock number, item ID or VIN
With search_by_id=1, numeric item IDs match by prefix and others match exactly, so pass the full number. /search-vin returns every lot of the car on the sources your key covers, archived ones included, which makes it the right call for a vehicle history page.
Branch dictionary
Load the dictionaries (/usa/branches, /usa/damages, /usa/titles, /usa/states) once and refresh them daily. Your filter dropdowns should come from them, not from values you happened to see in records.
Timed auctions, Buy Now and IAAI prices
IAAI runs live online auctions and timed auctions. On a timed sale, bidding is open over a window and closes at the sale date; the record says so with is_timed_auction: true, auction_type id 5, and a timed_start_bid where IAAI publishes one. Do not infer a timed auction from a sale date in the future: every upcoming lot has one.
Sale dates arrive in UTC with their own sale_date_updated_at. IAAI's pages show times in a local zone, so a buyer in Warsaw or Almaty needs the time converted to their zone, and your sync must not let an older value overwrite a newer one. The same goes for bid_updated_at, buy_now_updated_at and final_bid_updated_at: compare timestamps before writing.
Price display follows the same order as for Copart, and the JavaScript below is all a card needs:
Remember that bid returns the final bid once one is recorded, so it cannot tell you a car sold. Only final_bid can. The prices page has the edge cases, including archived lots that ended without a final bid (show "Ended", not "Sold").
IAAI photos, video and 360 views
For a buyer who will never see the car before it is shipped, photos are the inspection. IAAI listings usually carry a full set of exterior and interior shots, and many add an engine video or a 360-degree view. In the record they sit in lots[].images: small[] for thumbnails, normal[] and big[] for the gallery, video for a clip, and external_panorama_url when a 360 view exists.
Three rules keep a gallery working. Use normal[0] as the card photo and fall back to small[0] only if nothing larger exists; blurry thumbnails on a catalog page cost clicks. Load images lazily, because a results page of 50 cars with 10 photos each is a lot of bytes. And handle missing images: the files are hosted by the source, URLs can change size or expire after the sale, and an archived lot from last year may no longer have every photo it had on sale day. Show a placeholder on a 404 instead of a broken frame, and never send your API key to an image host.
If photos of past sales matter to your product (rebuilt-car history pages, for example), store your own copies at the time of the sale. That is a storage decision with a real cost, and it is easier to make on day one than to regret later.
One schema for IAAI and Copart
The point of normalising IAAI is that your code stops caring which auction a lot came from, except where it should. In one schema, the vehicle is shared and each lot carries its own source:
- Same fields, same enums. A run-and-drive filter is
condition=0on both auctions, a deployed airbag isairbagsid 2, an insurance seller isseller_typeid 1. - Source on the lot.
lots[].domain.idis 1 for IAAI and 3 for Copart. When you query withdomain_id=1, a vehicle that also has an active Copart lot comes back with both lots. Filter bydomain.idbefore showing an IAAI badge. - Separate identifiers. Lot and stock numbers can collide across the two auctions; the unique key is source plus number.
- Source extras stay optional. Fields such as
grade_iaai,note,tagsandlineexist only where a source provides them. Do not build required UI around them. - One VIN, many lots. A car can sell on IAAI, get rebuilt and reappear on Copart.
/search-vinreturns both lots as one history.
Label vocabularies are where the two auctions differ most: start codes, damage names, title wording, sale formats. We go through them side by side, with a normalisation table, in Copart vs IAAI.
IAAI integration mistakes we see
Most of these show up in the first week of a new catalog, usually reported by a buyer rather than caught by a test.
- Searching only by stock number. Users paste links, links carry the item ID, and the lookup returns nothing. Accept both, and route a pasted URL to
search_by_id=1. - Showing the branch as the car's address. For offsite vehicles the branch is only the seller of record. Check
location.is_offsitebefore you quote transport. - Treating Starts as Run & Drive. An engine that starts is not a car that moves. Keep the two conditions apart in filters and on the card.
- Labelling the high bid as the price. An archived lot without
final_bidended without a recorded sale price; show "Ended", not "Sold". - Hiding Canadian lots in USD. Amounts follow the lot's country, so a lot in Ontario is in Canadian dollars. Read
location.country.isoand label the currency. - Keying lots on the stock number alone. It can collide with a Copart lot number. Use source plus number, and keep the internal lot
idas the primary key. - Sending empty parameters.
domain_id=with no value can be rejected, and every rejected request still counts toward your allowance. Omit what you do not use.
Keeping IAAI data current
Treat IAAI exactly like Copart in your sync: one initial import of /cars?domain_id=1, then an hourly job that reads /cars?minutes=75 for changed lots and /archived-lots?minutes=75 for lots that left the auction, archiving the lot rather than the vehicle. If your key covers both sources, run one job without domain_id and route by lots[].domain.id. The steps, overlaps and failure handling are in the sync guide; the Copart API guide shows the same loop in code.
Next step
Open the Playground, switch the lot lookup to IAAI and paste a stock number, or run the three requests above with a free demo key. When you are ready to plan a catalog with both auctions, the Copart and IAAI API page lists what the feed includes.
Questions people ask
Does IAAI have an API for developers?
IAAI does not offer an open inventory API with self-service keys. Its integrations serve its sellers, such as insurers assigning vehicles, and its registered buyers and brokers. To use IAAI lots in your own product, you either collect them yourself after checking IAAI's terms of use or use a data provider that delivers them as JSON.
What is the difference between an IAAI stock number and item ID?
The stock number is what buyers search for and quote, shown on the listing as Stock #. The item ID is IAAI's internal listing id that appears in the page URL. Both point to the same listing. In our API the stock number is lots[].lot and the item ID is lots[].external_id; look up the latter with search_by_id=1.
What does Run & Drive mean on IAAI?
It means that at check-in the yard saw the vehicle start, go into gear and move under its own power. It is an observation on that day, not an inspection or a guarantee: batteries die, damage worsens and problems appear later. Starts means only the engine started. In normalised data both become values of the condition field.
Can I get IAAI final sale prices?
Yes, from a provider that records them when the auction closes. In our records the price a lot sold for is lots[].final_bid, which stays null until it is known and remains on the archived lot afterwards. The current bid, Buy Now price and seller reserve are different numbers and none of them is a sale price.
Are IAAI and Copart in the same API format?
In AuctionsAPI, yes. Both auctions use one vehicle object with the same fields and enum ids; each lot carries its source in domain (iaai_com is 1, copart_com is 3). That lets one sync job and one catalog cover both, as long as you read the source from each lot.


