# IAAI API — Insurance Auto Auctions salvage & total-loss car auction scraper: search live IAAI lots by make, model, year, damage, title type, odometer, branch and buyer licence, then pull the full lot record (VIN, damage, title, odometer, ACV, buy-now price, auction date, branch and geo) plus every auction photo. The direct counterpart to our Copart API, with matching field names. No login, no API key.

> Search live IAAI auction lots by free-text `query` and/or 25 structured filters (make, model, trim, year or year_min/year_max, damage, title_type, vehicle_type, loss_type, start_code, fuel_type, transmission, drive, cylinders, airbags, auction_type, who_can_buy, region, market, availability, branch, state, body_style, colour, country_of_origin, odometer_min/max). Sortable and paginated. Returns lot cards with damage, title, odometer, estimated value, auction date, branch and thumbnail, plus IAAI's own total for the query.
> ReefAPI engine `iaai` · 5 endpoints · clean JSON, no scraping or browsers to manage.

## How to call
- **Endpoint:** `POST https://api.reefapi.com/iaai/v1/<action>` with a JSON body.
- **Auth:** header `x-api-key: <YOUR_REEFAPI_KEY>` — create one free (1,000 credits, no card): https://reefapi.com/signup
- **Response (every call):** `{ ok: boolean, data: ..., meta: { record_count, credits, ... }, error: { code, message } }` — branch on `ok`. Failed calls are free except verified SHEIN NOT_FOUND on product/detail and price (4 credits).
- **One key + one shared credit pool** across every ReefAPI API. Per-call credits are listed on each endpoint below.
- **Use it from an AI agent (MCP):** connect `https://api.reefapi.com/mcp` (remote streamable-http, `Authorization: Bearer <key>`) and your assistant can call these actions directly.

## Endpoints

### POST /iaai/v1/search — 1 credit
Search live IAAI auction lots by free-text `query` and/or 25 structured filters (make, model, trim, year or year_min/year_max, damage, title_type, vehicle_type, loss_type, start_code, fuel_type, transmission, drive, cylinders, airbags, auction_type, who_can_buy, region, market, availability, branch, state, body_style, colour, country_of_origin, odometer_min/max). Sortable and paginated. Returns lot cards with damage, title, odometer, estimated value, auction date, branch and thumbnail, plus IAAI's own total for the query.

**Parameters:**
- `query` (string, optional) — Free-text keyword across the listing (make, model, series, stock number). Leave empty to browse everything and use filters.
- `make` (string, optional) — Vehicle make, exactly as IAAI spells it (TOYOTA, FORD, BMW). Get the live list from the `filters` action.
- `model` (string, optional) — Vehicle model (PRIUS C, F150, CIVIC). Pair with `make`.
- `trim` (string, optional) — Series / trim level as IAAI spells it (e.g. TWO, LIMITED, XLE).
- `year` (integer, optional) — Exact model year. For a span use year_min / year_max.
- `year_min` (integer, optional) — Earliest model year (inclusive).
- `year_max` (integer, optional) — Latest model year (inclusive).
- `title_type` (enum, optional) — Filter by title / sale document. [one of: salvage, clean, non_repairable, repairable, parts_only, bill_of_sale, none]
- `vehicle_type` (enum, optional) — Filter by vehicle category. [one of: automobile, boat, bus, classic, equipment, fleet, heavy_truck, light_truck, medium_truck, motorcycle, pickup, recreational, rental, suv, trailer, van]
- `damage` (enum, optional) — Filter by primary damage type. [one of: all_over, front_end, front, rear, front_and_rear, left_front, left_rear, left_side, right_front, right_rear, right_side, left_and_right_side, roof, roof_damage, rollover, roll_over, undercarriage, under_carriage, hail, flood, fresh_water, salt_water, water, total_burn, engine_burn, interior_burn, exterior_burn, engine_fire, interior_fire, mechanical, engine, engine_damage, transmission_damage, suspension, frame, structural, electrical, theft, vandalized, stripped, storm_damage, normal_wear, interior_damage, front_window, rear_window, biohazard, repossession, charity, none, unknown]
- `loss_type` (enum, optional) — Filter by loss type (how the vehicle was written off). [one of: collision, fire, theft, water, other]
- `start_code` (enum, optional) — Filter by IAAI's start/run condition code. [one of: run_and_drive, starts, stationary, cannot_test]
- `fuel_type` (enum, optional) — Filter by fuel type. [one of: gasoline, diesel, electric, hybrid, flexible, flexible_fuel, other]
- `transmission` (enum, optional) — Filter by transmission. [one of: automatic, manual, cvt, missing, unknown]
- `drive` (enum, optional) — Filter by drive line. [one of: fwd, rwd, awd, four_wheel_drive, 4x2]
- `cylinders` (enum, optional) — Filter by cylinder count. [one of: 1, 2, 3, 4, 5, 6, 8, 10, 12, rotary, other]
- `airbags` (enum, optional) — Filter by airbag state. [one of: intact, deployed]
- `auction_type` (enum, optional) — Filter by auction format. [one of: live, timed, buy_now]
- `who_can_buy` (enum, optional) — Filter by buyer licence required. `exporter` and `public` are the ones that matter if you are buying from outside the US. [one of: public, dealer, dismantler, exporter, rebuilder, scrapper, non_auto_licensed_business, other_licensed_business]
- `region` (enum, optional) — Filter by IAAI sales region. [one of: east, west, north, south, midwest, northeast, northwest, southeast, southwest, alaska, hawaii]
- `market` (enum, optional) — Filter by market (US, Canada or Ritchie Bros.). [one of: us, canada, ritchie_bros]
- `availability` (enum, optional) — Only lots that do / do not have a scheduled sale date. [one of: with_sale_date, without_sale_date]
- `odometer_min` (integer, optional) — Minimum odometer reading (miles).
- `odometer_max` (integer, optional) — Maximum odometer reading (miles).
- `branch` (string, optional) — Restrict to one IAAI branch by its exact name. Get names and live lot counts from the `branches` action.
- `state` (string, optional) — Vehicle location state, IAAI's spelling (full name for US states, 2-letter for Canadian provinces).
- `body_style` (string, optional) — Body style as IAAI spells it (SEDAN 4D, HATCHBACK, PICKUP...).
- `color` (string, optional) — Exterior colour.
- `country_of_origin` (string, optional) — Country the vehicle was manufactured in.
- `vehicle_subtype` (string, optional) — Sub-category for non-car inventory (ATV, Boat, Motor Home...).
- `engine_size` (string, optional) — Engine displacement as IAAI spells it, e.g. '2.0 L'.
- `sort` (enum, optional) — Result ordering. Omit for IAAI's own default relevance order. [one of: sale_date_asc, sale_date_desc, year_desc, year_asc, odometer_asc, odometer_desc, make_az, make_za, model_az, branch_az, state_az, stock_asc, stock_desc]
- `page` (integer, optional, default 1) — Page number (1-based). IAAI stops paging at 500.
- `size` (integer, optional, default 25) — Results per page (25-100). IAAI clamps anything below 25 up to 25.

**Returns:** lots[]{lot_number, lot_id, stock_number, vin(masked by IAAI), year, make, model, trim, title, body_style, color, interior_color, engine, cylinders, fuel_type, transmission, drive, country_of_origin, primary_damage, secondary_damage, title_type, title_state, loss_type, keys_available, airbags, start_code, run_and_drive, vehicle_grade, highlights[], odometer, odometer_unit, odometer_brand, estimated_retail_value, current_bid(null — not published logged-out), buy_it_now_price, minimum_bid, bid_increment, pre_bid_count, repair_cost, currency, sale_date, sale_status, timed_auction, lane, aisle, who_can_buy[], yard_name, yard_number, branch_name, branch_number, location_city, location_state, zip, latitude, longitude, market, thumbnail, url} + meta{total_results, pagination}

**Example request body:**
```json
{
  "make": "TOYOTA",
  "size": 25
}
```

### POST /iaai/v1/lot_detail — 1 credit
The full record for one lot by `lot_number`, read from IAAI's own page view-model: VIN (masked by IAAI), year/make/model/trim, primary and secondary damage, title type/state/brand, odometer with its ACTUAL/NOT-ACTUAL brand, engine, fuel, drive, transmission, airbags, start code, vehicle grade, ACV, buy-now price, minimum bid, bid increment, pre-bid participant count, auction date, lane/aisle, buyer-licence requirements and full branch location with latitude/longitude.

**Parameters:**
- `lot_number` (string, required) — IAAI item id — the id in an iaai.com /VehicleDetail/ URL, or a search result's `lot_number`. '46677675', '46677675~US', a Canadian 'Imp_2995978~CA' and a full URL are all accepted; pass `lot_id` back verbatim to keep the tenant. NOTE: this is not the same number as the displayed Stock #.
- `include_images` (boolean, optional, default false) — Also return every auction photo in this same call. The photos come from the page this action already fetches, so lot_detail+include_images costs one call instead of calling lot_images separately.

**Returns:** lot{lot_number, lot_id, stock_number, vin(masked by IAAI), year, make, model, trim, title, body_style, color, interior_color, engine, cylinders, fuel_type, transmission, drive, country_of_origin, primary_damage, secondary_damage, title_type, title_state, loss_type, keys_available, airbags, start_code, run_and_drive, vehicle_grade, highlights[], odometer, odometer_unit, odometer_brand, estimated_retail_value, current_bid(null — not published logged-out), buy_it_now_price, minimum_bid, bid_increment, pre_bid_count, repair_cost, currency, sale_date, sale_status, timed_auction, lane, aisle, who_can_buy[], yard_name, yard_number, branch_name, branch_number, location_city, location_state, zip, latitude, longitude, market, thumbnail, url, vin_status, title_brand, title_code, title_pending, vehicle_class, engine_size, restraint_system, options, catalytic_converter, operable, auction_id, slot, stall, vehicle_location, image_360_url}

### POST /iaai/v1/lot_images — 1 credit
Every auction photo for one lot: ordered full-size and thumbnail URLs with the native pixel dimensions of each image, plus the 360-degree viewer URL when IAAI publishes one.

**Parameters:**
- `lot_number` (string, required) — IAAI item id to fetch photos for.

**Returns:** images[]{sequence, key, width, height, full_url, thumbnail_url} + image_360_url

### POST /iaai/v1/branches — 1 credit
Live list of IAAI branches (yards) you can scope `search` to, each with its current lot count. Pass a name straight back as search's `branch` filter.

**Parameters:**
- `query` (string, optional) — Optional case-insensitive substring to find a branch, e.g. 'dallas', '(PA)', 'phoenix'.

**Returns:** branches[]{name, location, lot_count}

### POST /iaai/v1/filters — 1 credit
The live filter taxonomy straight from IAAI, with a current lot count for every value: the exact strings `search` accepts for the open-ended filters it cannot enumerate up front (1,785 makes, 6,311 models, 849 branches, 229 body styles). Pass any search filter alongside `group` to get the counts WITHIN that query — e.g. group=Model with make=TOYOTA lists only Toyota models and how many lots each has right now.

**Parameters:**
- `group` (string, optional) — Which taxonomy to return — Make, Model, Series, BranchName, StateDesc, BodyStyleName, PrimaryDamageDesc, InventoryTypes, SaleDocument, ExteriorColor, CountryOfOrigin, DisplLiters, Year. Omit to get every group at once.
- `query` (string, optional) — Free-text keyword across the listing (make, model, series, stock number). Leave empty to browse everything and use filters.
- `make` (string, optional) — Vehicle make, exactly as IAAI spells it (TOYOTA, FORD, BMW). Get the live list from the `filters` action.
- `model` (string, optional) — Vehicle model (PRIUS C, F150, CIVIC). Pair with `make`.
- `trim` (string, optional) — Series / trim level as IAAI spells it (e.g. TWO, LIMITED, XLE).
- `year` (integer, optional) — Exact model year. For a span use year_min / year_max.
- `year_min` (integer, optional) — Earliest model year (inclusive).
- `year_max` (integer, optional) — Latest model year (inclusive).
- `title_type` (enum, optional) — Filter by title / sale document. [one of: salvage, clean, non_repairable, repairable, parts_only, bill_of_sale, none]
- `vehicle_type` (enum, optional) — Filter by vehicle category. [one of: automobile, boat, bus, classic, equipment, fleet, heavy_truck, light_truck, medium_truck, motorcycle, pickup, recreational, rental, suv, trailer, van]
- `damage` (enum, optional) — Filter by primary damage type. [one of: all_over, front_end, front, rear, front_and_rear, left_front, left_rear, left_side, right_front, right_rear, right_side, left_and_right_side, roof, roof_damage, rollover, roll_over, undercarriage, under_carriage, hail, flood, fresh_water, salt_water, water, total_burn, engine_burn, interior_burn, exterior_burn, engine_fire, interior_fire, mechanical, engine, engine_damage, transmission_damage, suspension, frame, structural, electrical, theft, vandalized, stripped, storm_damage, normal_wear, interior_damage, front_window, rear_window, biohazard, repossession, charity, none, unknown]
- `loss_type` (enum, optional) — Filter by loss type (how the vehicle was written off). [one of: collision, fire, theft, water, other]
- `start_code` (enum, optional) — Filter by IAAI's start/run condition code. [one of: run_and_drive, starts, stationary, cannot_test]
- `fuel_type` (enum, optional) — Filter by fuel type. [one of: gasoline, diesel, electric, hybrid, flexible, flexible_fuel, other]
- `transmission` (enum, optional) — Filter by transmission. [one of: automatic, manual, cvt, missing, unknown]
- `drive` (enum, optional) — Filter by drive line. [one of: fwd, rwd, awd, four_wheel_drive, 4x2]
- `cylinders` (enum, optional) — Filter by cylinder count. [one of: 1, 2, 3, 4, 5, 6, 8, 10, 12, rotary, other]
- `airbags` (enum, optional) — Filter by airbag state. [one of: intact, deployed]
- `auction_type` (enum, optional) — Filter by auction format. [one of: live, timed, buy_now]
- `who_can_buy` (enum, optional) — Filter by buyer licence required. `exporter` and `public` are the ones that matter if you are buying from outside the US. [one of: public, dealer, dismantler, exporter, rebuilder, scrapper, non_auto_licensed_business, other_licensed_business]
- `region` (enum, optional) — Filter by IAAI sales region. [one of: east, west, north, south, midwest, northeast, northwest, southeast, southwest, alaska, hawaii]
- `market` (enum, optional) — Filter by market (US, Canada or Ritchie Bros.). [one of: us, canada, ritchie_bros]
- `availability` (enum, optional) — Only lots that do / do not have a scheduled sale date. [one of: with_sale_date, without_sale_date]
- `odometer_min` (integer, optional) — Minimum odometer reading (miles).
- `odometer_max` (integer, optional) — Maximum odometer reading (miles).
- `branch` (string, optional) — Restrict to one IAAI branch by its exact name. Get names and live lot counts from the `branches` action.
- `state` (string, optional) — Vehicle location state, IAAI's spelling (full name for US states, 2-letter for Canadian provinces).
- `body_style` (string, optional) — Body style as IAAI spells it (SEDAN 4D, HATCHBACK, PICKUP...).
- `color` (string, optional) — Exterior colour.
- `country_of_origin` (string, optional) — Country the vehicle was manufactured in.
- `vehicle_subtype` (string, optional) — Sub-category for non-car inventory (ATV, Boat, Motor Home...).
- `engine_size` (string, optional) — Engine displacement as IAAI spells it, e.g. '2.0 L'.
- `sort` (enum, optional) — Result ordering. Omit for IAAI's own default relevance order. [one of: sale_date_asc, sale_date_desc, year_desc, year_asc, odometer_asc, odometer_desc, make_az, make_za, model_az, branch_az, state_az, stock_asc, stock_desc]
- `page` (integer, optional, default 1) — Page number (1-based). IAAI stops paging at 500.
- `size` (integer, optional, default 25) — Results per page (25-100). IAAI clamps anything below 25 up to 25.

**Returns:** groups{<Group>: [{value, count}]} (one group when `group` is given)

## More
- Try it live, no code: https://reefapi.com/playground?engine=iaai
- Human docs page: https://reefapi.com/docs/iaai
- Overview page: https://reefapi.com/iaai-api
- Every ReefAPI API in one file (for your AI): https://reefapi.com/llms-full.txt
