- Salvage exchange and auction platform
- Platforms on which damaged, returned or retired vehicles — increasingly individual components as well — are listed with photos and a description and sold by bidding. Listers are insurers, appraisers, leasing companies, fleets and dealers; bidders are dismantlers, dealers, workshops and exporters. The salvage value of an accident vehicle arises here from the bids. This page addresses the operators and developers of such platforms.
Where data goes missing in the process
A salvage exchange depends on both sides trusting the listing: the lister has to describe a vehicle completely in little time, the bidder has to decide within the bidding window what it is worth to them. Gaps regularly arise at five points:
- When listing. The VIN is typed from the appraisal or from a photo; a swapped character surfaces only once a bidder has calculated the wrong vehicle.
- In the damage description. Every lister photographs and phrases differently. Two listings for the same damage pattern are not comparable.
- In the images. Nobody checks systematically before publication whether a photo still shows a legible plate; in parts auctions the images show serial numbers and other instance-specific identifiers the seller does not want to disclose before the hammer falls.
- In the listing copy. Title, description and equipment list are written by hand for each vehicle — and once more in another language for bidders abroad.
- At the bid. The dismantler calculates from experience within the bidding window: which parts yield revenue, what equipment the vehicle has, whether it may be transported as goods. The equipment is not in the photos, and the end-of-life classification remains guesswork.
What the API delivers
| Process step | Call | Result |
|---|---|---|
| Read the VIN from a photo | POST /scanner/vin/extract | Complete 17-character VIN from windscreen, type plate, door-frame label or stamping; unreadable means vin is null |
| Describe condition and damage | POST /vision/condition-report, POST /vision/damage/describe | Walk-around in eight zones with overall grade A/B/C (up to 8 photos); damage text in six fixed sections (1–5 photos) |
| Detect the plate | POST /vision/license-plate | Characters, comparison form, country, confidence and position on the vehicle (vorne/hinten); up to 3 photos; no keeper lookup |
| Anonymise part images | POST /vision/identifiers/redact | Instance-specific identifiers in the part image anonymised, type and OE identifiers stay visible; for parts auctions before the hammer falls |
| Create the listing | POST /vehicles/{tapiId}/listing | Title, description and equipment highlights in de, en or fr; no prices, no condition statements |
| Calculate before bidding | GET /vin/{vin}/economic-evaluation | Parts revenue potential as min/average/max, dismantling ranking by revenue, purchase recommendation; provider=1 only |
| Classify as end-of-life | POST /vision/vehicle/elv-classification | Level kein_altfahrzeug_verdacht, gutachten_empfohlen or altfahrzeug; per criterion finding, confidence and evidence images |
One process from start to finish
- Identify the vehicle. The lister uploads the photos; the backend reads the VIN from the vehicle photo with
POST /scanner/vin/extract. If it is not readable,vinisnull— the field stays empty and becomes follow-up work. If the registration document is at hand,POST /vehicles/intakewithfileUrlhandles this and the next step in one call. - Match the vehicle and obtain a `tapiId`. With
provider2 or 3,GET /vin/{vin}/vehicleanswers directly. Provider 1 may not be retrieved directly by a third-party system: the backend creates a session fromvin,returnUrlandstatewithPOST /vin/redirect-sessionsand sends the user toredirectUrl; after the match in the tapinoma interface they return toreturnUrlwithstatus=completed,tapiIdandstate— or withstatus=cancelled. Vehicle data is never in the redirect; the session expires after ten minutes. The VIN process and the later listing calls run under the same key, because thetapiIdis bound to the client that obtained it. - Document condition and damage. The walk-around with up to 8 photos goes to
POST /vision/condition-reportand returns as a finding per zone with overall gradeA/B/C. The actual damage is described byPOST /vision/damage/describefrom 1 to 5 photos in six fixed sections; sections without findings are stated as such, and only what is visible is described — see Accident vehicles. - Check images before publication.
POST /vision/license-platereads from up to 3 photos the characters, country, confidence and position on the vehicle (vorne/hinten); with the characters your software checks the vehicle against the order, and a non-emptyplatesshows before publication that an image still contains a legible plate. The masking itself is not something the API does. In parts auctions,POST /vision/identifiers/redactanonymises instance-specific identifiers in the part image before it goes live; type and OE identifiers remain visible — see Part images. - Generate the listing copy.
POST /vehicles/{tapiId}/listingwithlanguageper target market and lister notes innotesreturns title, description and equipment highlights from the documented vehicle data. The text invents no properties and states neither prices nor condition. - Bidder side: calculate before bidding. Before the evaluation, the bidder completes the provider 1 vehicle match via
POST /vin/redirect-sessionsunder their own key. Only then doesGET /vin/{vin}/economic-evaluationrun withprovider=1: it answers with200if the parts list and market price assessments are already available, otherwise with202,Location,Retry-Afterand a job ID; the result is then collected byGET /vin/economic-evaluation/jobs/{jobId}. It contains the parts revenue potential asmin/average/max, a dismantling ranking sorted by revenue and a purchase recommendation. Small parts are filtered out, and market price assessments are reused for up to 30 days — see Vehicle purchasing and Dismantling depth. - Bidder side: classify as end-of-life. Whether the vehicle is transported as goods or as waste after the hammer falls decides logistics and paperwork.
POST /vision/vehicle/elv-classificationdelivers from 1 to 10 photos the levelkein_altfahrzeug_verdacht,gutachten_empfohlenoraltfahrzeug;altfahrzeugis assigned only on a highly evidenced criterion or from the arithmetic with a supplied market value and repair estimate. The legal distinction is covered in Used car or end-of-life vehicle.
curl \ -H 'X-Api-Key: <API_KEY>' \ 'https://api.tapinomahub.com/vin/<VIN>/economic-evaluation?provider=1'
The integration
- Store the key server-side. The
X-Api-Keyheader is set only from the backend. Neither the lister interface nor the bidder app talks to the API directly; the redirect session is created on the server as well. - Start with one endpoint. Listing side:
POST /vision/condition-report, because it makes listings comparable; bidding side: the provider 1 vehicle match viaPOST /vin/redirect-sessionsunder the bidder's own key, only thenGET /vin/{vin}/economic-evaluationwithprovider=1. Plate, listing and end-of-life classification follow as separate steps. - Define the field mapping. Which zones of the condition report and which values of the evaluation land in which fields of the listing and the bidder view? That mapping is the actual work; the reference is in the integration guide.
- Separate failure from empty result.
404 vehicle_not_foundandvinbeingnullare empty results, not errors: create the listing, leave the field empty, keep the match as follow-up work. A completed image analysis is billed even without findings; retry only where it could not be performed at all. - Build in the pick-up on `202`. The economic evaluation answers with
200if the parts list and market price assessments are already available, otherwise with202,Location,Retry-Afterand a job ID; the result is then collected byGET /vin/economic-evaluation/jobs/{jobId}from a queue in your backend — not from the bidder's browser. Your software has to handle both answers. - Roll out step by step. First one group of listers, then the bidders.
GET /client/usageshows which calls run how often;X-Tapinoma-Usage-Warningreports low credit.
What to watch out for
- Set `Idempotency-Key`. An upload submitted twice must not trigger a second analysis; the header makes the repeat recognisable (
X-Tapinoma-Idempotent-Replay), and billing happens once. Exception: calls that issue a key are not replayed — after a timeout, reconcile what exists. - Leave empty fields empty. An unreadable VIN, a zone without findings, a position without a market reference: the result names the gap, the listing shows it — no default value, no completion from a similar vehicle.
- Store the `tapiId` on the listing — together with the client. It is the stable identifier for listing copy and vehicle data;
GET /vehicles/{tapiId}later delivers the technical data as part of the previously paid VIN workflow, but only with the key of the client that obtained thetapiIdthere. With any other key the API answers404. - Never put the key in the browser. Neither in the lister interface nor in the bidder app. Every call and every redirect session runs through your backend.
- Plan for rate limits. Before an auction closes, many bidders query the same listings; evaluations belong in a queue, not in the click. Limits per user, key or endpoint are set via
PUT /client/users/{clientId}/rate-limits. - Have the result checked. Condition report, damage text and purchase recommendation are working aids; the bid remains the bidder's decision, the release of the listing the lister's.
What the API does not do
Condition report and damage text are not appraisals and contain no repair or salvage value calculation; they describe what is visible in the photos. The plate is read, not checked against a register; there is no keeper lookup. The economic evaluation is a purchase recommendation from market references, not a salvage value and not a price guarantee — the salvage value arises on your platform from the bids. Vehicle data from provider 1 cannot be retrieved directly by a third-party system via GET /vin/{vin}/vehicle; that match runs through the user's browser via POST /vin/redirect-sessions. No data set is sold: what is owed is the performance of the query or analysis; the result is checked and used by you, your listers and your bidders.
Frequently asked
Can the platform offer the economic evaluation to every bidder?
Yes. Each bidder receives their own workspace via POST /client/partner-workspaces in which POST /vin/redirect-sessions and GET /vin/{vin}/economic-evaluation are enabled; optionally the platform bears the cost through cost coverage. Before the evaluation, the bidder completes the provider 1 vehicle match via POST /vin/redirect-sessions under their own key; only then does GET /vin/{vin}/economic-evaluation run with provider=1 and answer with 200 or — if it still has to run — with 202 and a job ID.
What happens if the VIN in the photo is not readable?
POST /scanner/vin/extract returns vin as null. That is an empty result, not an error; the analysis is billed, the field stays empty and becomes follow-up work. If the registration document is at hand, POST /vehicles/intake reads the VIN from it.
Why does the match with provider 1 run through a redirect?
Because third-party systems may not retrieve provider 1 directly. POST /vin/redirect-sessions creates a single-use session, the user matches in the tapinoma interface and returns with a tapiId. Vehicle data is never in the redirect; the session expires after ten minutes.
Is the purchase recommendation the salvage value?
No. It is a working aid for the bidder from market references and the dismantling ranking, without price guarantee. The salvage value is the amount the vehicle actually achieves — it arises from the bids on your platform.
