ImportOS · Docs
API reference

POST /v1/underwrite

AI underwriter: repair estimate, risk flags, resale forecast and maximum bid for a lot

AI underwriter: repair estimate, risk flags, resale forecast and maximum bid for a lot

Analyses an auction lot in seconds: Damage Vision over the photos → repair estimate per node (from the tenant price list), risk flags (flood, airbags, odometer rollback, relist, title brands...), resale forecast from the listings cache, landed cost with repair and cost of capital → margin at p25/p50/p75 → the highest bid that still meets the target margin and a green/yellow/red verdict. Scopes: read:pricing AND read:listings. audience "broker" (full report with margin and scenarios) additionally needs write:deals; the default "client" audience never contains the company margin. Quota: Starter/trial 20 analyses per month, Pro 300, Business unlimited; over the limit → 402 quota_exceeded. A repeat call for the same VIN, date and parameters is served from cache and spends nothing. Without ANTHROPIC_API_KEY the vision step runs in demo mode (summary.vision_mode = "mock").

Descriptions of the operation, parameters and fields come from the OpenAPI specification (openapi.json).

Parameters

FieldInTypeRequiredDescription
idempotency-keyheaderstringnoMakes a retry of this POST safe for 24 hours: the same key and body returns the stored response.

Request body

FieldTypeRequiredDescription
vinstringnoVIN of the lot (used for the history of this VIN).
auction"copart" | "iaai" | "manheim" | "other"no
lot_idstringnoLot number at the auction.
makestringyes
modelstringyes
yearintegeryes
fuel"petrol" | "diesel" | "hybrid" | "phev" | "ev" | "lpg" | "cng" | "hydrogen" | "other"yes
engine_ccintegernoRequired for every fuel type except ev.
kwhnumbernoBattery capacity; required for ev.
mileage_kmnumberno
title_status"clean" | "salvage" | "rebuilt" | "flood" | "junk" | "parts_only" | "certificate" | "unknown"no
damage_primarystringnoPrimary damage as shown by the auction.
damage_secondarystringno
airbags_deployedbooleanno
runs_and_drivesbooleanno
descriptionstringnoLot description / notes, used for risk flags.
lot_price_usdnumberyesCurrent bid or buy-now price in USD.
auction_yardstringnoYard name, e.g. "NJ - TRENTON".
us_statestringno
photosstring (uri)[]noPublic https URLs of lot photos (Damage Vision). Without photos the repair estimate is not made from images.
destination_country"UA" | "PL" | "LT" | "GE" | "DE"yes
destination_citystringno
target_margin_pctnumbernoTarget margin as a fraction (0.12 = 12%). Default: tenant setting, else 12%.
datestringno
arrival_datestringno
locale"uk" | "pl" | "en"no
insurance"none" | "basic" | "full"no
audience"client" | "broker"no"client": no company margin, scenarios or cost of capital. "broker": full report; requires scope write:deals.
forcebooleannoIgnore the VIN+date cache (spends one analysis of the plan quota).

Responses

200

The report.

application/json · Schema: UnderwriteResponse

FieldTypeRequiredDescription
report_idstring (uuid)yes
cachedbooleanyestrue: a report for the same VIN, date and parameters existed (no quota spent).
audience"client" | "broker"yes
usageobjectyes
usage.monthstringyes
usage.usedintegeryes
usage.limitinteger | nullyesnull: unlimited.
summaryobjectyes
summary.signal"green" | "yellow" | "red"yes
summary.verdictstringyesgood | ok | risky | no
summary.currencystringyesCurrency of landed cost / margin figures.
summary.max_bid_usdnumber | nullyesHighest bid (USD) that still meets the target margin; null if none.
summary.max_bid_conservative_usdnumber | nullyesSame with repair at its maximum and resale at p25. null for the client audience.
summary.repair_usdobjectyes
summary.landed_totalnumber | nullyesTurnkey cost including the repair estimate, in currency. null for the client audience.
summary.margin_pctnumber | nullyesMargin at the median resale price (fraction). null for the client audience.
summary.margin_absnumber | nullyes
summary.resale_mediannumber | nullyesForecast median resale price in currency. null for the client audience.
summary.flagsobject[]yes
summary.explanationstringyesPlain-language explanation in the requested locale.
summary.warningsstring[]yes
summary.typicalobjectyes
summary.vision_modestringyeslive | mock | none: mock means no ANTHROPIC_API_KEY (demo mode).
reportobjectyesThe full report (schema version 1): subject, vision, repair, flags, forecast, verdict, explanations, cost, typical, warnings.

400

Invalid request parameters or body (code validation_error).

application/problem+json · Schema: Problem

401

Missing, malformed, unknown, revoked or expired API key (code unauthorized).

application/problem+json · Schema: Problem

402

The monthly analysis quota of the plan is used up (code quota_exceeded).

application/problem+json · Schema: Problem

403

The API key lacks the scope required by this endpoint (code insufficient_scope).

application/problem+json · Schema: Problem

422

Not enough data to analyse the lot (e.g. engine_cc missing).

application/problem+json · Schema: Problem

429

Rate limit exceeded for the tenant plan (code rate_limited). Wait Retry-After seconds.

application/problem+json · Schema: Problem

502

FX provider unavailable.

application/problem+json · Schema: Problem

On this page