Am Hoftor steht ein Unfallfahrzeug, der Verkäufer will einen Preis hören, und die Entscheidung fällt in Minuten. Wer nur auf Erfahrung setzt, zahlt bei ungewöhnlichen Baureihen zu viel und lässt bei unauffälligen zu viel liegen. Der Fahrzeugweg der tapinomahub API setzt an derselben Stelle an wie der Einkäufer: bei der Fahrgestellnummer — und endet bei einer nachvollziehbaren Zahl samt Reihenfolge für die Demontage.
Stufe 1: Das Fahrzeug eindeutig machen
GET /vin/{vin}/vehicle gleicht die VIN gegen die freigeschaltete Quelle ab. Mit includeEquipments, includeColors und includeTechnical steuern Sie, wie tief die Antwort geht; country setzt den Marktbezug, provider die vertraglich vereinbarte Quelle. Ein erfolgreicher Abgleich enthält eine stabile tapiId — die Kennung, mit der alle weiteren Aufrufe dasselbe Fahrzeug meinen. Die Leistungsbeschreibung steht in Fahrzeugdaten anhand der VIN abgleichen.
curl \ -H 'X-Api-Key: <API_KEY>' \ 'https://api.tapinomahub.com/vin/WVWZZZ1KZAW000000/vehicle?includeEquipments=true&includeTechnical=true'
| Feld | Inhalt | Verwendung |
|---|---|---|
tapiId | Stabile Fahrzeugreferenz nach erfolgreichem Abgleich | Klammer über Teileliste, Bewertung und Fahrzeugakte |
mainType, subType, constructionPeriod | Baureihe, Ausführung und Bauzeitraum | Grundlage jeder Verwendungsliste und jeder Inseratsangabe |
kTypes, natCodes | Bekannte Typschlüssel des Fahrzeugtyps | Anschluss an TecDoc-Strukturen und Katalogsysteme |
kba.hsn, kba.tsn | Deutsche Schlüsselnummern, soweit verfügbar | Abgleich mit HSN/TSN aus dem Fahrzeugschein |
engine.codes, transmission.codes | Motor- und Getriebecodes des Typs | Unterscheidung von Aggregaten, die äußerlich gleich aussehen |
equipmentsCategorized, manufacturerOrderCodes | Ausstattung nach Kategorien, Bestellcodes mit matched und unmatched | Nachweis wertbestimmender Ausstattung wie Matrix-Licht oder Assistenzsysteme |
incomplete, dates.production | Hinweis auf eine unvollständige Antwort, Produktionsdatum | Entscheidung, ob die Datenlage für eine Bewertung ausreicht |
Stufe 2: Die Teileliste des Fahrzeugs
GET /vin/{vin}/parts gibt die ermittelten OE-Positionen zurück: je Teil number und numberUnformatted, name und nameAddition, category, manufacturer, amount, price, tapiGenArt und das Pflichtfeld vdi. vdi enthält bestätigte vollständige VDI-4081-Codes und bleibt ohne gültige Zuordnung als [] vorhanden. Wichtiger als die Liste selbst ist ihre Einordnung: matchLevel sagt, wie belastbar die Zuordnung ist, und missingCategories sagt, was fehlt. Eine nicht leere Liste in missingCategories bedeutet ausdrücklich, dass die Teileliste unvollständig ist. Details in Teilezuordnungen anhand der VIN abgleichen.
| Wert | Bedeutung | Folge für die Verwendung |
|---|---|---|
vehicle_specific_best_available | Fahrzeugspezifische Zuordnung in der besten verfügbaren Güte | Tragfähig für Bewertung und Demontageplanung |
vehicle_specific_unverified | Fahrzeugspezifisch, aber nicht gegengeprüft | Für interne Planung nutzbar; einzelne Positionen vor dem Verkauf prüfen |
vehicle_type_candidates | Kandidaten auf Ebene des Fahrzeugtyps, nicht des Einzelfahrzeugs | Nicht als Passungsaussage verwenden — hier entscheidet das Teil am Fahrzeug |
Der asynchrone Auftrag, richtig behandelt
Teileliste und Bewertung können länger dauern, als eine HTTP-Antwort warten soll. Deshalb antwortet die API entweder unmittelbar mit 200 oder nimmt den Auftrag mit 202 an — samt Location, Retry-After und einer jobId. Das ist der dokumentierte Normalfall und keine Störung.
- Beide Antworten behandeln. Eine Anbindung, die nur
200kennt, funktioniert im Test und fällt im Betrieb aus.202liefertjobId,statusUrl,statusundretryAfterSeconds. - Im genannten Abstand nachfragen, nicht in einer engen Schleife.
GET /vin/parts/jobs/{jobId}undGET /vin/economic-evaluation/jobs/{jobId}gebenqueued,running,succeededoderfailedzurück. - Bei `succeeded` steht das Ergebnis in `result` — dieselbe Struktur wie bei einer direkten
200-Antwort. Ihr Code braucht also nur einen Auswertepfad. - Bei `failed` unterscheidet `error.code` zwischen
vehicle_not_found— ein fachlicher Leerbefund — undvin_service_unavailable, einem technischen Ausfall. Nur der zweite Fall rechtfertigt einen erneuten Versuch. - Die Job-Kennung gehört in den Vorgang. Wer sie verliert, kann ein Ergebnis nicht mehr abholen; ein unbekannter Auftrag endet in
404 vin_parts_job_not_found.
# 202 Accepted: {"jobId":"8f1c…","status":"queued","retryAfterSeconds":5,…}
curl \
-H 'X-Api-Key: <API_KEY>' \
'https://api.tapinomahub.com/vin/parts/jobs/8f1c2f9e-2a44-4b7f-9a1e-6d4b8f0c3a21'Stufe 3: Die Wirtschaftlichkeitsanalyse
GET /vin/{vin}/economic-evaluation verbindet die Teileliste mit Marktpreisen und rechnet daraus drei Dinge: das Erlöspotenzial des Fahrzeugs, eine Reihenfolge für die Demontage und eine Einkaufsempfehlung. Die Antwort legt ihre Annahmen offen, damit jede Zahl nachgerechnet werden kann — siehe Wirtschaftlichkeitsanalyse anhand der VIN erstellen.
| Parameter | Bedeutung | Bereich und Vorgabe |
|---|---|---|
condition | Zustand, der der Preisbewertung zugrunde liegt | used oder new |
recoveryRate | Anteil des Erlöspotenzials, der beim Verkauf tatsächlich erzielt wird | 0,05 bis 1; Vorgabe 0,5 |
costPerPart | Angenommene Kosten je bewertetem Teil für Ausbau, Lagerung und Versand, in EUR | 0 bis 1000; Vorgabe 0 |
maxPricedParts | Obergrenze der Teile, die in die Bewertung einbezogen werden | Vorgabe und Maximum 100 |
- `coverage` macht die Datenlage sichtbar:
totalParts,excludedIrrelevant,relevantParts,selectedParts,pricedPartsundunpricedParts. Eine hohe Zahl inunpricedPartsist ein Warnzeichen, keine Nebensache. - `revenuePotential` nennt
min,averageundmax. Die Spanne bleibt vollständig sichtbar — sie wird nicht zu einer Zahl verdichtet. - `purchaseRecommendation.goodPurchasePriceEur` ist die Zahl für das Gespräch am Hoftor:
recoveryRatemal dem Minimum, abzüglich der angenommenen Kosten je bewertetem Teil. - `assumptions.priceBasis` weist
minaus. Damit ist im Ergebnis dokumentiert, auf welcher Basis die Empfehlung steht. - `parts[]` trägt
rank, Nummer, Bezeichnung, Kategorie undpricingmitmin,average,max,confidenceundevaluatedAt. Die Geldbeträge inpricinggelten je Stück. - `amount` stammt unverändert aus der Teileliste des Anbieters, ist nicht geprüft und geht in keine Berechnung ein. Gerechnet wird mit einer Einheit je Teil.
Abrechnung: das monatliche VIN-Bundle
- VIN Vehicle, VIN Parts und VIN Cart Check bilden das Bundle `VIN_MONTHLY_LOOKUP`. Abrechnung und Wiederholungen richten sich ausschließlich nach den vereinbarten Konditionen. Cache- oder Ergebniswiederverwendung verändert die Kundenabrechnung nicht.
- Der Header `X-Tapinoma-Billing-Bundle` ist gesetzt, wenn ein Aufruf unter diesen Deckel fällt.
X-Tapinoma-Billing-Sourcenennt dazu die Abrechnungsentscheidung. - Ein Plan gilt je Endpunkt-Schlüssel, nicht pauschal. Deckt kein Plan den Aufruf oder ist das Monatskontingent verbraucht, wird das Guthabenkonto belastet; reicht es nicht, antwortet die API mit
402 insufficient_credits. - `404 vin_not_resolvable` kennzeichnet einen nicht durchgeführten Abgleich; seine kaufmännische Behandlung richtet sich nach den vor dem Auftrag angezeigten und vertraglich vereinbarten Konditionen.
- Die Sandbox folgt den vereinbarten Konditionen. Sie verwendet dieselbe Basisadresse, antwortet nur mit dokumentierten synthetischen Testdaten und verhält sich bei Validierung, Ratenlimits und asynchronen Zuständen wie beschrieben — der richtige Ort, um die
202-Behandlung zu bauen.
Der Ablauf im Ankauf
- VIN erfassen — abgetippt, aus dem Fahrzeugschein über
POST /scanner/document/registrationoder vom Fahrzeug überPOST /scanner/vin/extract. 17 Stellen, sonst400 invalid_vin. - Fahrzeug abgleichen und
tapiId,matchLevelder Folgeaufrufe undincompleteim Vorgang festhalten. - Teileliste anfordern und
202sauber behandeln. Job-Kennung speichern, im genannten Abstand nachfragen. - Bewertung mit Ihren Annahmen anfordern, nicht mit den Vorgaben. Quote und Kosten je Teil kennt Ihr Betrieb besser als jede Vorgabe.
- Empfehlung, Spanne und Abdeckung gemeinsam anzeigen. Eine Zahl ohne
coveragedaneben verleitet zu Vertrauen, das die Datenlage nicht hergibt. - Demontage nach
rankplanen. Die ersten Positionen tragen den Erlös; der Rest entscheidet über die Hallenzeit. - Nach dem Verkauf gegenrechnen: erzielter Erlös gegen Empfehlung, bewertete gegen verkaufte Teile. Daraus entsteht Ihre eigene, belastbare
recoveryRate.
Grenzen, die man kennen muss
- Eine Bewertung ist keine Preisgarantie. Sie ist indikativ, sie beruht auf Marktangeboten und Annahmen, und sie ersetzt die Besichtigung nicht. Schäden, Laufleistung und Vollständigkeit sieht keine VIN-Abfrage.
- Die Abdeckung hängt an der Quelle. Je nach Hersteller, Baujahr und Markt liegen unterschiedlich viele Daten vor.
incomplete,missingCategoriesundunpricedPartssind die Felder, die das sichtbar machen. - Eine VIN ist ein Fahrzeugbezug und kann personenbezogen werden. Sie dürfen nur übermitteln, wozu Sie befugt sind, und nur das, was für den Zweck erforderlich ist. Die Aufbewahrung im eigenen System folgt Ihrem Vertrag und Ihrer Löschfrist.
- `vehicle_type_candidates` ist keine Passungsaussage. Auf dieser Stufe beschreibt die Liste den Fahrzeugtyp, nicht das Einzelfahrzeug.
- Die Teileliste ist kein Bestandsverzeichnis. Sie sagt, was in diesem Typ verbaut sein kann — nicht, was in diesem Fahrzeug noch verbaut und verkäuflich ist. Den Unterschied macht die Besichtigung.
Schemata, Fehlercodes und Beispielantworten stehen in der Entwicklerdokumentation. Sobald aus dem bewerteten Fahrzeug einzelne Teile werden, geht es weiter mit Von der OE-Nummer zum marktplatzfertigen Artikel und, sobald die Teile auf der Werkbank liegen, mit Vom Teilefoto zum Inserat: der Bildweg durch die tapinomahub API.
Quellen und Rechtsgrundlagen
Häufige Fragen
Warum antwortet die API mit 202 statt mit dem Ergebnis?
Weil der Abgleich beim Anbieter länger dauern kann als eine Antwort warten soll. Die 202 nennt jobId, statusUrl und retryAfterSeconds; das Ergebnis steht später in result und hat dieselbe Struktur wie eine direkte Antwort.
Kostet jede VIN-Abfrage erneut Geld?
Nein. VIN Vehicle, VIN Parts und VIN Cart Check bilden ein monatliches Bundle: Je Client und VIN wird im Kalendermonat höchstens einmal der Bundle-Preis belastet.
Warum steht die Einkaufsempfehlung auf dem Minimum?
Weil beim Ankauf gezahlt wird, bevor verkauft ist. assumptions.priceBasis weist min aus; das Erlöspotenzial bleibt vollständig mit min, average und max in der Antwort.
Wird mit der Stückzahl aus der Teileliste gerechnet?
Nein. amount stammt unverändert und ungeprüft aus der Liste des Anbieters. Gerechnet wird mit einer Einheit je Teil, damit eine fragwürdige Stückzahl kein Geld multipliziert.
Ersetzt die Analyse die Besichtigung?
Nein. Sie bewertet, was laut Datenlage verbaut sein kann. Schäden, Laufleistung, fehlende Teile und der tatsächliche Zustand bleiben Sache der Inaugenscheinnahme.
