- Vehicle marketplace and listing portal
- Software through which vehicles are advertised and searched: marketplaces with many sellers, portals for accident and salvage vehicles, listing managers of individual dealers, and publishing tools that feed several marketplaces at once. It is run by a portal operator; the listings come from dealerships, traders, dismantlers, fleets and private sellers, and the searchers are buyers, traders and workshops. Between entering and publishing lie fields that are typed, estimated or left empty — that is where the API comes in. This page addresses the operators of such portals.
Where data is missing in the process
A listing is only as good as what the seller enters — rarely complete, not always correct. What is missing costs visibility in the filters and trust with the buyer; what is wrong costs enquiries and withdrawals. The typical points:
- Entering the vehicle. The seller copies VIN, first registration and type key numbers from the registration certificate. A transposed digit in the VIN surfaces only when a buyer compares the number with the vehicle; with foreign documents even the mapping of the fields is often unclear.
- Filter fields. Gearbox, drivetrain, body and engine are not fully stated on the certificate. What the seller does not enter stays empty, and the listing does not appear in the search.
- Listing text. Title and description come from text modules or are copied from the previous listing — including equipment this vehicle does not have.
- Photos. Shots from the yard with neighbouring vehicles in the background, inconsistent, often with a readable number plate. Whether one is readable is rarely checked before publishing; the masking itself remains the portal's job.
- Condition and recalls. Condition statements come from the seller and are not evidenced; whether a recall campaign exists for the model line is known neither to the portal nor to the buyer.
What the API delivers
| Process step | Call | Result |
|---|---|---|
| Read the registration document | POST /scanner/document/registration/international | Normalised core fields plus every field read in fields, print kept in sourceValue; level standard |
| Vehicle match in the browser | POST /vin/redirect-sessions | Single-use session with redirectUrl; return to returnUrl with status, tapiId and state |
| Generate listing text | POST /vehicles/{tapiId}/listing | Title, description and equipment highlights in de, en or fr; without price or condition statements |
| Condition report from the walk-around | POST /vision/condition-report | Findings per zone from up to 8 shots in a fixed order, overall grade A, B or C |
| Cut out the vehicle photo | POST /vision/vehicle/remove/bg | Cut-out image; the model determines only the outline, the pixels come unchanged from the photo |
| Detect a readable number plate | POST /vision/license-plate | Characters, comparison form, country, confidence and position on the vehicle from up to 3 shots; no image coordinates, no keeper lookup |
| Recall notice on the listing | GET /recalls/vehicles/{vin} | Campaigns for the model line with reference, register, defect description, remedy, stop-drive flag and confidence |
A process from start to finish
- Photograph the document. The seller photographs the registration certificate; the portal backend stores the file and passes its address as
fileUrltoPOST /scanner/document/registration/international— for German certificatesPOST /scanner/document/registrationis enough. The vehicle fields pre-fill the form; names, addresses, number plates and VIN are never translated, and the keeper fields are not taken over by the portal, see Data in an end-of-life vehicle: what stays in the infotainment when the car goes. - Start the vehicle match. For provider 1,
GET /vin/{vin}/vehicleanswers a third-party system withredirect_required. The backend therefore creates a session withPOST /vin/redirect-sessionsfromvin, the absolute HTTPSreturnUrland astatecarrying its own listing number, and sends the seller to theredirectUrl. Providers 2 and 3 can be queried directly. - Handle the return. After the match in the tapinoma interface the seller comes back to the
returnUrl— withstatus=completed,tapiIdandstate, or withstatus=cancelled. Vehicle, equipment or access data never appear in the redirect; the session expires after ten minutes. The portal stores thetapiIdon the listing. - Fill filter fields and text.
GET /vehicles/{tapiId}returns the technical vehicle data as part of the previously paid VIN workflow, without VIN and without equipment.POST /vehicles/{tapiId}/listingwithlanguageand optional dealer notes innotesreturns title, description and equipment highlights — no invented properties, no price, no condition statement. - Record the walk-around. Up to 8 shots go to
POST /vision/condition-report; back come findings per zone in a fixed order and an overall gradeA,BorC.POST /vehicles/intakecombines document, vehicle match and condition report in one call — the match there runs fixed via provider 2 without redirect, andphotoUrlstakes up to five shots. - Prepare the photos.
POST /vision/vehicle/remove/bgcuts out the vehicle; the model determines only the outline, the pixels remain those of the photo, see cut-outs without redrawing.POST /vision/license-platesays whether and which number plate is readable on a shot — characters, country, front or rear; it returns no image coordinates and masks nothing. If it reports a readable plate, the portal holds the release; the masking remains the portal's own task. - Show the recall notice.
GET /recalls/vehicles/{vin}checks the model line against the official registers — Kraftfahrt-Bundesamt, EU Safety Gate, NHTSA. The VIN is resolved only from the existing stock, no supplier call is made. The portal shows the notice on the listing as a working aid.
curl \
-H 'X-Api-Key: <API_KEY>' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: <UUID_PER_TRANSACTION>' \
-d '{"language": "en", "notes": "Tow bar retrofitted"}' \
'https://api.tapinomahub.com/vehicles/<TAPI_ID>/listing'The integration
- Store the key server-side. The API key goes out as header
X-Api-Keyfrom the portal backend and belongs in its configuration — never in the listing form in the browser, never in source code. - Choose one endpoint. Reading the registration document at listing time is the obvious entry point because it immediately replaces typing errors. The listing text via
POST /vehicles/{tapiId}/listingrequires a completed VIN process and comes afterwards. - Define the field mapping. Which response field lands in which listing field? That mapping is the actual work. The listing additionally needs a field for the
tapiIdand a note of which values came from the lookup. - Distinguish empty result from error.
404 vehicle_not_foundis not an error but a result: not found. The portal still creates the listing, leaves the fields empty and asks the seller to complete them — never as a red error message;status=cancelledon return is not an error either. A dropped connection, by contrast, may be retried with the sameIdempotency-Key. - Collect long-running jobs. If an endpoint answers with
202,LocationandRetry-Aftername the job and the waiting time. The status is collected at the associated job endpoint, not by calling the original endpoint a second time. - Roll out and observe. First one seller with a manageable stock, then the whole platform.
GET /client/usageand the response headerX-Tapinoma-Usage-Warningshow credit consumption; the path from contract to go-live is described in the integration guide.
What to watch out for
- Set an `Idempotency-Key`. Recommended is a UUID per business transaction, at least 8 characters, such as
listing-<no>-text-<uuid>— not the listing number alone, because a key counts as completed after the first success and document reading, redirect session and listing text would otherwise receive the same stored response. After a dropped connection the backend repeats the call with the same key and receives the same response, recognisable by the headerX-Tapinoma-Idempotent-Replay; it is stored for 24 hours and only on success. The exception is calls that issue a secret key (sub-users, partner workspaces): after a timeout, reconcile the stock instead of blindly retrying. - Leave empty fields empty. If the response returns
null, the field stays empty — no default, no text module, no derivation from similar listings. Plausible equipment in a listing is more dangerous than a visible gap, because the buyer reads it as a promise. - Store the `tapiId`. It is stable and the key to
GET /vehicles/{tapiId}andPOST /vehicles/{tapiId}/listing. Results belong in the portal's database, not in every page view; every request costs. - Never put the key in the browser. The listing form talks to the portal backend, the backend to the API. The redirect session for provider 1 is also created server-side; the browser only sees the
redirectUrl, and on return the backend checks thatstatebelongs to one of its own transactions. - Set rate limits per seller.
PUT /client/users/{clientId}/rate-limitslimits per user, key or endpoint, so that a faulty stock import by one dealer does not use up the portal's credit. - Have the result checked. Listing text, condition report, cut-out image and recall notice are working aids. The seller reads the text and reviews the images before publishing; the recall notice applies to the model line, not as proof for this vehicle.
What the API does not do
The API does not value a vehicle and names no price — the listing text deliberately contains none, and there is no price guarantee. The condition report from POST /vision/condition-report describes what is visible and is not an appraisal; it calculates neither repair nor salvage value, see Accident vehicles: write-offs, salvage value and what matters to a dismantler. For the number plate there is no keeper lookup, no register check and no anonymisation — POST /vision/license-plate makes plates readable, not unreadable. Provider 1 is reachable for third-party systems only through the browser redirect. And it sells no data set: what is owed is the lookup or analysis with its result; responsibility for the listing stays with the seller. What the material does not yield remains a gap — why is explained in VIN lookup in practice: process, result, billing.
Frequently asked
Why does `GET /vin/{vin}/vehicle` answer with `redirect_required`?
Because provider 1 may not be queried directly by third-party systems. The match runs through a browser session from POST /vin/redirect-sessions; on return the portal receives the tapiId, but no vehicle data. Providers 2 and 3 can be queried directly.
Does the cut-out change the vehicle photo?
No. The model determines only the outline; the pixels of the vehicle come unchanged from the submitted photo. The result is a photograph, not a redrawn image.
Does the listing text invent equipment or name prices?
No. POST /vehicles/{tapiId}/listing writes title, description and highlights from the documented vehicle data and the dealer notes in notes; what is not evidenced does not appear, prices and condition statements never. The seller reads the text before publishing.
Can we pay for our dealers' usage?
Yes. When creating a partner workspace via POST /client/partner-workspaces, the portal can cover the costs of the activated endpoints; for existing accounts PUT /client/sponsorship-grants/{grantReference} serves. If the portal releases partnerTermsAllowed and the dealer chooses the partner mode, every covered request is billed at the portal's terms.
