Praxis & Prozesse · Teilehandel

Vom Fundstück zum richtigen Teil.

Ein belastbarer End-to-End-Prozess für Marktplätze, Verwerter, ERP-Anbieter, Autohändler und Dealer-Management-Systeme – mit sauberer Mandantentrennung und nachvollziehbaren Prüfentscheidungen.

Zwei Einstiegspfade, ein konsistenter Teile-Datensatz.

01 · Idealprozess

Zwei sichere Wege zur Teileidentität

Die Pfade können einzeln funktionieren. Liegen Etikett und Spenderfahrzeug vor, werden sie zusammengeführt: Die OE-Nummer identifiziert das Teil, die VIN liefert den Fahrzeugkontext.

A

Etikett → OE-Abfrage

Optimal für ausgebaute, gelagerte oder einzeln angelieferte Teile.

  1. Bild erfassenEtikett gerade, scharf und vollständig fotografieren; Bildrecht und Übermittlungsbefugnis sicherstellen.
  2. Alle Merkmale extrahierenPOST /scanner/label/extract-all mit quality=standard starten; nur bei unzureichendem Ergebnis höher gehen.
  3. Nummern als Kandidaten behandelnprimaryPartNumber, weitere Teilenummern, Hersteller, Variante und Produktionsdaten getrennt übernehmen.
  4. OE-Treffer zuerst bestätigenJede plausible Nummer über GET /parts/oe/{oeNumber} abgleichen. HTTP 200 liefert einen bestätigten Treffer im Pflichtfeld part; ohne Treffer antwortet der Hub mit 404. Die zurückgegebene Ersetzungskette berücksichtigen.
  5. Optional anreichernAftermarket-Referenzen, Preisbewertung und SEO nur nach einem bestätigten OE-Treffer abrufen.
  6. Prüfstatus setzenTreffer, Widersprüche und verwendete Quellen am Mandanten-Datensatz protokollieren; unklare Fälle in die manuelle Prüfung geben.
B

Fahrzeugschein → VIN & VIN-Teile

Optimal für Verwerter, Fahrzeugannahme und Teile aus bekanntem Spenderfahrzeug.

  1. Dokument erfassenFahrzeugschein nur mit gültiger Berechtigung scannen; personenbezogene Felder im Kundensystem minimieren.
  2. VIN extrahieren und prüfenPOST /scanner/vin/extract für Fahrzeugfotos oder POST /scanner/document/registration/international für normalisierte internationale Fahrzeugschein-Daten aus Bild/PDF; VIN auf 17 Zeichen und Lesefehler prüfen. Der nationale Vertrag liegt unter POST /scanner/document/registration.
  3. Fahrzeug abgleichenGET /vin/{vin}/vehicle mit dem vereinbarten provider-Auswahlwert aufrufen. Antwortet die API mit redirect_required, dem dokumentierten Redirect-Ablauf folgen.
  4. Stabile Referenz sicherntapiId, Fahrzeuganzeige und den verwendeten provider-Auswahlwert am Mandanten-Fahrzeug speichern.
  5. VIN-Fahrzeug, dann VIN-TeileGET /vin/{vin}/parts ohne widersprüchlichen provider-Wert aufrufen. Bei 202 die Job-URL gemäß Retry-After abfragen.
  6. Treffercharakter bewertenmatchLevel, fehlende Kategorien und Varianten berücksichtigen; Kandidaten sind nicht automatisch Einbaugarantien.

Zusammenführung: OE-Treffer ∩ VIN-Kontext

Übereinstimmung von bestätigter OE-Nummer und VIN-Teileliste ist das stärkste Signal. Bei Abweichung nicht automatisch korrigieren, sondern Quelle, Variante, Ersetzungskette und Teilfoto prüfen.

02 · Zielgruppen

Ein Prozess, fünf Betriebsmodelle

Der fachliche Kern bleibt gleich. Verantwortlichkeit, Speichertiefe und Übergabepunkt unterscheiden sich je nach Rolle im Ökosystem.

Market

Marktplätze

Übernehmen bereits geprüfte Angebote oder bieten eine geführte Erfassung für Verkäufer.

  • Mandant ist der Verkäufer bzw. Händler; Angebote, Kontingente und Herkunftsnachweise bleiben getrennt.
  • Veröffentlichung erst nach fachlicher Freigabe und mit sichtbarer Unterscheidung zwischen fahrzeugspezifischem Treffer und Typ-Kandidat.
  • Keine Kompatibilitätsbehauptung aus einer Aftermarket-Referenz allein ableiten.
  • Kanalspezifische Titel und SEO von der geprüften Teileidentität ableiten, nicht umgekehrt. /parts/oe/{oeNumber}/seo liefert dafür Angebotstitel, eBay-Kategorie, Artikelmerkmale und Suchbegriffe je Marktplatz und Sprache.
Recycling

Verwerter

Verwerter und Teilehändler identifizieren Teile im eigenen System; die API liefert die dokumentierten Ergebnisse für den Demontageprozess.

  • Etikettfoto direkt am Lagerplatz oder während der Demontage aufnehmen und mit interner Artikel-ID verknüpfen.
  • Spender-VIN einmal am Fahrzeug erfassen; tapiId und geprüfte Fahrzeugdaten für alle zugehörigen Teile wiederverwenden.
  • Zustand, Laufleistung, Lagerplatz und eigene Bilder bleiben führend im Händlersystem.
  • Nur grüne Treffer automatisch freigeben; Varianten, Sicherheitsbauteile und Widersprüche durch Fachpersonal prüfen.
ERP

ERP

ERP-Anbieter orchestrieren den Prozess und speichern operative Daten strikt auf Mandantenebene.

  • Jeden ERP-Mandanten auf einen eigenen tapinoma-Workspace/API-Key und eigene Nutzungsgrenzen abbilden.
  • Hub-Konditionen nur aktiv und endpunktspezifisch über PUT /client/sponsorship-grants/{grantReference} freigeben.
  • Den eigenen Mandantenschlüssel bei Fahrzeug, Teil, Scan-Auftrag, Prüfentscheidung und Export erzwingen. tapinoma kennt kein Mandantenfeld: die Trennung entsteht hier über den Unter-Nutzer und seinen API-Key.
  • Globale Stammdaten nur dort teilen, wo Vertrag und Rechte dies erlauben; Rohdokumente nicht mandantenübergreifend speichern.
  • Idempotente Importjobs und fachliche Statuswerte statt bloßer „API erfolgreich“-Flags verwenden.
Dealer

Autohändler

Nehmen Gebrauchtwagen mit einem einzigen Aufruf herein und dokumentieren sie strukturiert.

  • Fahrzeugschein-Foto senden; POST /vehicles/intake liefert die Fahrzeugakte mit den Fahrzeugdaten zurück.
  • Rundgang-Fotos über POST /vision/condition-report in einen strukturierten Zustandsbericht überführen.
  • Börsenfertigen Inseratstext mit POST /vehicles/{tapiId}/listing aus den dokumentierten Fahrzeugdaten erzeugen.
  • Preisentscheidung, eigene Bilder und Verkaufsfreigabe bleiben führend im Händlersystem.
DMS

DMS

Dealer-Management-Systeme betten die API als White-Label-Baustein für ihre Händler ein.

  • Je Händler mit einem Aufruf einen kompletten Workspace anlegen: POST /client/partner-workspaces erstellt Unter-Client, API-Key und Endpunkt-Freischaltung, optional mit Kostenübernahme.
  • Wie Integratoren Hub-Antworten in einer versionsfesten Zwischenschicht halten; Feldmapping nicht direkt an UI-Felder koppeln.
  • 202-Jobs asynchron und mit Retry-After verarbeiten; keine kurzen Dauer-Polling-Schleifen.
  • Jeden Händler eindeutig einem Unter-Client zuordnen und API-Keys niemals gemeinsam über Kunden hinweg nutzen.

03 · Daten & Mandanten

Klare Grenzen statt Datenkopien

Das Kundensystem bleibt führend für Bestand und Angebot. Hub-Ergebnisse werden als belegte Anreicherung mit Quelle und Prüfstatus gespeichert.

Mandantenbezogen

Nie zwischen Kunden vermischen

  • Interne Artikel- und Fahrzeug-IDs
  • Scan-Auftrag und Bildreferenz
  • Zustand, Lagerplatz, Einkauf, Verkäufer
  • Prüfentscheidung und Exportstatus
  • Nutzung, Kontingent und Kostenstelle

Referenzierbar

Nur im vertraglich erlaubten Umfang

  • Normalisierte OE-Nummer
  • tapiId als stabile Fahrzeugreferenz
  • Ersetzungskette und Katalogantwort
  • Technische Bezeichnungen
  • API- und Mapping-Version

Temporär / minimiert

Kurze Frist, enger Zweck

  • Rohbild des Fahrzeugscheins
  • Personenbezogene Dokumentfelder
  • Öffentlich abrufbare Scan-URL
  • Fehlerpayloads mit Eingangsdaten
  • Debug- und Supportexporte
01 · Eingangsource_captureMandant, interne ID, Bildreferenz, Zweck, Zeitpunkt
02 · Kandidatpart_candidateErkannte Nummern und Merkmale, noch nicht freigegeben
03 · Referenzcatalog_matchOE-Antwort, Ersatzkette, VIN-Kontext, matchLevel
04 · PrüfungverificationAmpel, Gründe, Prüfer oder Automatikregel
05 · Ausgabechannel_offerPreis, Text, Kanalstatus und Exportversion

04 · API-Rezepte

Der Prozess als konkrete Aufrufkette

Die Beispiele zeigen die Orchestrierung. Pflichtfelder, vollständige Antwortschemata, Nutzungsbedingungen und aktuelle Preise stehen in der API-Dokumentation.

POST1. Etikett vollständig auslesen/scanner/label/extract-all

Zweck: Mögliche Teilenummern und weitere verwertbare Merkmale erfassen.

  • Mit standard beginnen.
  • Alle Nummern bleiben Kandidaten.
  • Bild-URL nach der Verarbeitung entziehen oder löschen.
curl -X POST \
  'https://api.tapinomahub.com/scanner/label/extract-all' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "imageUrl": "https://files.example/label-4711.jpg",
    "quality": "standard"
  }'
GET2. OE-Nummer bestätigen und anreichern/parts/oe/{oeNumber}

Zweck: Eine OE-Nummer bestätigen und den öffentlich verfügbaren Teilekontext abrufen.

  • Jeden plausiblen Kandidaten separat abfragen.
  • HTTP 200 liefert einen bestätigten OE-Treffer im Pflichtfeld part.
  • Eine erfolgreiche Antwort enthält genau oeNumber, normalizedOeNumber, tapiGenArt, vdi, part, fitment, replacementChain, references und referenceNumbers. part.name ist optional und kann null sein.
  • fitment enthält die verfügbaren Typzuordnungen und kann leer sein.
  • references gruppiert bestätigte Referenz- und Vergleichsnummern nach manufacturer in numbers; referenceNumbers enthält ausschließlich oe_oem_reference_numbers als konsolidierte Liste einschließlich der bestätigten OE-Nummer.
  • replacementChain enthält bestätigte gerichtete from/to-Kanten. Die Referenzansichten werden nicht daraus abgeleitet und die Kette nicht aus ihnen.
  • tapiGenArt und vdi sind unabhängige Best-effort-Ergänzungen. null beziehungsweise [] blockieren den bestätigten Basistreffer oder die jeweils andere Klassifikation nicht.
  • 404 bedeutet, dass kein OE-Treffer vorliegt; 422 kennzeichnet eine mehrdeutige Auflösung.
  • Nur nach einem Treffer optional /parts/oe/{oeNumber}/aftermarket-references, /parts/oe/{oeNumber}/price und /parts/oe/{oeNumber}/seo ergänzen.
curl \
  -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/parts/oe/5Q0919275C'

# Optional nur nach bestätigtem OE-Treffer:
# /parts/oe/5Q0919275C/aftermarket-references
# /parts/oe/5Q0919275C/price
# /parts/oe/5Q0919275C/seo
GET2a. Artikel für eBay und Marktplätze optimieren/parts/oe/{oeNumber}/seo

Zweck: Aus einer bestätigten OE-Nummer den veröffentlichungsfertigen Artikel erzeugen: Angebotstitel, Marktplatzkategorie, Artikelmerkmale, Suchbegriffe und Shop-SEO-Text.

  • marketplaceId wählt den Marktplatz. Dokumentiert sind die eBay-Marktplätze EBAY_AT, EBAY_AU, EBAY_BE, EBAY_CA, EBAY_CH, EBAY_DE, EBAY_ES, EBAY_FR, EBAY_GB, EBAY_HK, EBAY_IE, EBAY_IT, EBAY_NL, EBAY_PL, EBAY_SG und EBAY_US; Standard ist EBAY_DE.
  • language wählt die Inhaltssprache aus de, en, fr, es, it, nl, pl und zh; vehicleType ist car oder motorcycle.
  • content.ebayTitle ist der Artikeltitel für die eBay-Angebotsüberschrift innerhalb der dokumentierten Grenze von 80 Zeichen.
  • categoryId ist die Kategorie des angefragten Marktplatzes, bei einem EBAY_*-Marktplatz also die eBay-Kategorie. Das Feld ist immer vorhanden und kann null sein.
  • itemSpecifics liefert die Artikelmerkmale als {name, value[]}, keywords die Suchbegriffe und product die Produktbenennung.
  • content.title, content.h1, content.metaTitle, content.metaDescription, content.slug und content.bulletPoints füllen die eigene Shop-Seite.
  • 404 seo_no_exact_match ist die dokumentierte Nichttreffer-Antwort, kein Fehler im Ablauf.
  • 429 seo_live_requests_paused nennt über X-Tapinoma-Live-Available-At den frühesten erneuten Abruf.
  • Kein Idempotency-Key. Inhalte vor der Veröffentlichung prüfen: Es ist Veröffentlichungstext und keine Passungsaussage.
curl \
  -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/parts/oe/5Q0919275C/seo?marketplaceId=EBAY_DE&language=de&vehicleType=car'
POST3. Fahrzeugschein in Fahrzeugdaten überführen/scanner/document/registration/international

Zweck: VIN, normalisierte Kernfelder und länderspezifische Dokumentfelder aus einem Bild oder PDF strukturiert erfassen.

  • Für neue und internationale Integrationen den kanonischen Pfad verwenden; /scanner/registration-document/v2 bleibt als veralteter Kompatibilitätsalias ohne HTTP-Weiterleitung und mit identischer Antwort erhalten.
  • fileUrl ist der kanonische Parameter; imageUrl und imageURL sind nur Kompatibilitätsaliase.
  • quality=standard ist für diese persönliche Dokumentanalyse die einzige angebotene Verarbeitungsstufe.
  • Personenbezogene Felder nicht für den Teileprozess übernehmen.
  • VIN vor Folgeaufrufen auf Lesefehler prüfen und das Quelldokument nicht als dauerhaften Fahrzeugbeleg behandeln.
curl -X POST \
  'https://api.tapinomahub.com/scanner/document/registration/international' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "fileUrl": "https://files.example/registration-4711.pdf",
    "quality": "standard"
  }'
POST3a. VIN direkt aus einem Fahrzeugfoto lesen/scanner/vin/extract

Zweck: Eine vollständig sichtbare VIN hinter der Windschutzscheibe, auf einem Türrahmenetikett oder einer Prägung auslesen.

  • Unvollständige oder mehrdeutige Ergebnisse liefern vin: null.
  • Nur Bilder, keine PDFs, an diesen Endpunkt senden.
  • Mit standard beginnen und nur bei Bedarf auf enhanced oder maximum erhöhen.
curl -X POST \
  'https://api.tapinomahub.com/scanner/vin/extract' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "imageUrl": "https://files.example/windshield-vin.jpg",
    "quality": "standard"
  }'
GET4. Fahrzeug binden, Teile abrufen, Job verfolgen/vin/{vin}/vehicle → /vin/{vin}/parts

Zweck: Stabile Fahrzeugreferenz und Teileliste mit maschinenlesbarem Treffercharakter erhalten.

  • GET /vin/{vin}/vehicle mit dem vereinbarten provider-Auswahlwert aufrufen.
  • Bei redirect_required den dokumentierten Redirect-Ablauf abschließen und die zurückgegebene tapiId übernehmen.
  • Nach der Fahrzeugabfrage provider bei der Teileabfrage weglassen; ein widersprüchlicher Wert führt zu vin_provider_mismatch.
  • Jede Position enthält genau eine tapinomahub GenArt im Pflichtfeld tapiGenArt, zum Beispiel TGA-000001, sowie das Pflichtfeld parts[].vdi mit bestätigten vollständigen VDI-4081-Codes. Ohne gültige Zuordnung bleibt parts[].vdi als [] vorhanden. Den Ergebnischarakter ausschließlich aus matchLevel lesen.
  • Bei 202 Location und Retry-After beachten; die zurückgegebene Job-Status-URL beziehungsweise GET /vin/parts/jobs/{jobId} abrufen. Der Statusabruf gehört zum ursprünglichen Auftrag und löst keine zweite Bestellung aus.
  • Abrechnung und Erstattung richten sich nach den dokumentierten Antwortzuständen und den vereinbarten Konditionen.
# Fahrzeugabfrage mit Auswahlwert 2
curl -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/WVWZZZ1JZXW000001/vehicle?country=de&provider=2'

# Auswahlwert beim Teileabruf nicht erneut senden
curl -i -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/WVWZZZ1JZXW000001/parts?country=de'

# Nur bei 202: Status-URL aus der Antwort abfragen
curl -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/parts/jobs/<JOB_ID>'
PUT5. Hub-Konditionen aktiv sponsern/client/sponsorship-grants/{grantReference}

Zweck: Ein ERP gibt ausgewählten tapinoma-Workspaces seine Konditionen ausdrücklich für Hub-Abfragen frei.

  • Der ERP-Master ruft den Endpunkt mit dem eigenen API-Key auf.
  • Workspace, Endpunkte, Kanal hub und Laufzeit werden explizit festgelegt.
  • Die Oberfläche liest eingehende Grants über GET /client/sponsorship-grants/received und zeigt Sponsor, Umfang und Status an.
  • Ein Widerruf beendet nur die künftige Kostenübernahme, nicht den direkten tapinoma-Account oder vorhandene Ergebnisse.
curl -X PUT \
  'https://api.tapinomahub.com/client/sponsorship-grants/erp-customer-4711' \
  -H 'X-Api-Key: <ERP_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{"beneficiaryClientId":4711,"endpointKeys":["vin.vehicle","vin.parts"],"channels":["hub"]}'

05 · Qualität

Eine Ampel, die Gründe zeigt

Die Ampel ist eine Empfehlung für das Kundensystem, kein Feld der Hub-API. Sie muss aus belegbaren Signalen und fachlichen Regeln entstehen.

Grün · automatisch freigabefähig

OE-Treffer bestätigt, Nummer eindeutig, Label-Hersteller plausibel und – falls vorhanden – Übereinstimmung mit einer fahrzeugspezifischen VIN-Teileliste. Keine ungeklärte Variante.

Gelb · Fachprüfung

Mehrere Nummernkandidaten, Ersetzungskette, VIN-Typkandidaten, unbestätigte Fahrzeugzuordnung, fehlende Kategorie oder abweichende Variantenmerkmale.

Rot · nicht veröffentlichen

Kein bestätigbarer OE-Treffer, widersprüchliche Hersteller/Nummern, unlesbares Bild, widersprüchlicher Auswahlwert oder fehlende Berechtigung zur Verarbeitung.

Definition of Done

Ein Teil ist prozessual fertig, wenn:

  • Mandant und interne Artikel-ID eindeutig sind.
  • OE-Nummer normalisiert und bestätigt ist.
  • Im VIN-Pfad die zurückgegebene tapinomahub GenArt aus dem Pflichtfeld parts[].tapiGenArt, zum Beispiel TGA-000001, sowie das erforderliche Array parts[].vdi einschließlich eines gültigen leeren Arrays gespeichert sind.
  • Im reinen OE-Pfad hat HTTP 200 das Pflichtfeld part geliefert und die für den Prozess benötigten Antwortfelder wurden verarbeitet; bei fehlendem Treffer wurde 404 behandelt.
  • Quelle, Zeitpunkt und API-/Mapping-Version feststehen.
  • VIN-Kontext samt matchLevel berücksichtigt wurde, falls vorhanden.
  • Zustand, Bilder und kommerzielle Angaben vom Händler stammen.
  • Freigabegrund und Kanalstatus nachvollziehbar sind.

Häufige Fehlmuster

Diese Abkürzungen erzeugen später teure Rückläufer:

  • OCR-Ergebnis direkt als Artikelnummer speichern.
  • Aftermarket-Referenz als Einbaugarantie darstellen.
  • Den provider-Auswahlwert nach erfolgtem VIN-Abgleich widersprüchlich ändern.
  • 202 als Fehler oder als fertige Teileliste behandeln.
  • Dokumentbilder dauerhaft oder mandantenübergreifend speichern.
  • SEO-Text vor der Teileidentität erzeugen.

06 · Betrieb

Statuscodes werden zu Arbeitszuständen

Integrationen sollten HTTP-Antworten in fachliche Zustände übersetzen und innerhalb einer Statusklasse nach dem stabilen Feld error verzweigen. message ist nur für Menschen bestimmt und kein verlässlicher Programmschlüssel.

Idempotenz ist ein Zustandsautomat: Eine Schreiboperation unterstützt sie nur, wenn die API-Referenz den Request-Parameter Idempotency-Key ausweist; ausschließlich dieser deklarierte Parameter ist dafür maßgeblich. Der erste Erfolg meldet mit X-Tapinoma-Idempotency-Stored: true oder false, ob die Antwort 24 Stunden lang gespeichert wurde. Bei true liefert derselbe Idempotency-Key mit demselben Inhalt die gespeicherte Antwort. Bei false antwortet derselbe Idempotency-Key mit 409 idempotency_result_unavailable: Zustand abgleichen und niemals automatisch einen neuen Idempotency-Key verwenden. Ein paralleler Aufruf mit demselben Idempotency-Key liefert 409 idempotency_request_in_progress und Retry-After; danach denselben Idempotency-Key erneut senden. Die Raw-Key-Aufrufe POST /client/users, POST /client/users/{clientId}/keys und POST /client/partner-workspaces akzeptieren keinen Idempotency-Key (400 idempotency_key_not_supported); nach unklarem Ausgang den Client-, Workspace- und Schlüsselbestand per GET abgleichen.
AntwortTypische error-CodesFachlicher ZustandReaktion im KundensystemAutomatik
200—Ergebnis vorhandenAntwort speichern, Regeln ausführen, Prüfampel aktualisieren.Ja, wenn fachliche Kriterien erfüllt sind.
202—Auftrag angenommenJob-ID und zurückgegebene Status-URL speichern; erst nach Retry-After abfragen. Eine redirectUrl gehört dagegen nur in den Browser-Redirect-Ablauf.Ja, asynchron.
400bad_request, invalid_json, idempotency_key_not_supported, endpunktspezifische ValidierungscodesAnfrage ungültigEingabe oder Mapping korrigieren. Bei idempotency_key_not_supported den Header entfernen; war ein vorheriger Raw-Key-Aufruf im Ausgang unklar, vor jeder weiteren Aktion per GET abgleichen.Nein.
401missing_api_keyAuthentifizierung fehltServerseitige Key-Konfiguration prüfen; keinen Key im Browser oder Log offenlegen.Nein.
402insufficient_credits, partner_terms_not_covered, sponsorship_cap_reachedAbrechnung blockiertPlan, Guthaben, Sponsoring oder Monatsdeckel gezielt klären.Erst nach kaufmännischer Klärung.
403invalid_api_key, endpoint_not_allowed, sandbox_endpoint_unavailableZugang oder Endpunkt gesperrtKey-Status, Freischaltung und Umgebung prüfen.Nein.
404oe_part_not_found, vin_parts_job_not_found, endpunktspezifische Not-found-CodesRessource oder Treffer fehlterror unterscheiden: Kandidat prüfen oder bei verlorenem/fremdem Job die Orchestrierung klären.Keine automatische Freigabe.
409/422redirect_required, vin_provider_mismatch, idempotency_key_conflict, idempotency_request_in_progress, idempotency_result_unavailable, ambiguous_oe_numberInteraktion oder Klärung nötigNach idempotency_request_in_progress Retry-After abwarten und denselben Idempotency-Key senden. Bei idempotency_result_unavailable den Zustand abgleichen und keinen neuen Idempotency-Key automatisch erzeugen. Alle übrigen Fälle nach error führen; nicht blind wiederholen oder Kandidaten still auswählen.Geführt.
429rate_limit_exceeded, client_request_in_progressLimit oder Parallelgrenze erreichtRetry-After beachten und mandantenspezifisch verzögern.Backoff, kein Parallelsturm.
5xxinternal_error und weitere dokumentierte FehlercodesTemporär nicht verfügbarEine wiederholbare Schreiboperation am dokumentierten Idempotency-Key-Parameter erkennen und begrenzt mit demselben Idempotency-Key sowie Backoff wiederholen. Bei den drei Raw-Key-POSTs nach unklarem Ausgang zuerst per GET abgleichen; nicht blind wiederholen.Mit Backoff und Obergrenze; Key-Ausgabe nur per Abgleich.

Bereit für die technische Umsetzung?

In der API-Dokumentation stehen alle Endpunkte, Schemas, Antwortfelder und verbindlichen Nutzungshinweise – auch für Rückrufe, Wirtschaftlichkeitsanalysen, Fahrzeugannahme und weitere Vision-Workflows. Dieser Leitfaden beschreibt die empfohlene Orchestrierung im Kundensystem.

Zur API-Dokumentation

Practice & processes · Parts trade

From loose part to the right identity.

A dependable end-to-end process for marketplaces, dismantlers, ERP vendors, car dealers, and dealer management systems—with strict tenant separation and explainable verification decisions.

Two entry paths, one consistent part record.

01 · Ideal process

Two reliable paths to a part identity

Either path can work on its own. When both the label and donor vehicle are available, merge them: the OE number identifies the part while the VIN provides the vehicle context.

A

Label → OE lookup

Best for removed, stored, or individually delivered parts.

  1. Capture the imagePhotograph the label straight-on, sharply and in full; confirm image rights and authority to transmit it.
  2. Extract all attributesStart POST /scanner/label/extract-all with quality=standard; increase quality only when needed.
  3. Treat numbers as candidatesKeep primaryPartNumber, other numbers, manufacturer, variant and production information separate.
  4. Confirm the OE match firstCheck each plausible number using GET /parts/oe/{oeNumber}. HTTP 200 returns a confirmed match in the required part field; without a match, the Hub returns 404. Account for the returned replacement chain.
  5. Enrich when usefulRequest aftermarket references, price evaluation and SEO only after a confirmed OE match.
  6. Set a verification stateRecord matches, conflicts and sources on the tenant record; route ambiguous cases to manual review.
B

Registration document → VIN & VIN parts

Best for dismantlers, vehicle intake and parts from a known donor vehicle.

  1. Capture the documentScan only with valid authority; minimise personal fields retained by the customer system.
  2. Extract and validate the VINUse POST /scanner/vin/extract for a vehicle photo or POST /scanner/document/registration/international for normalised international registration data from an image/PDF; check all 17 characters. The national contract is at POST /scanner/document/registration.
  3. Match the vehicleCall GET /vin/{vin}/vehicle with the agreed provider selection value. If the API returns redirect_required, follow the documented redirect flow.
  4. Keep the stable referenceStore tapiId, vehicle display data and the selected provider value on the tenant vehicle.
  5. VIN vehicle, then VIN partsCall GET /vin/{vin}/parts without a conflicting provider value. On 202, poll the job URL according to Retry-After.
  6. Evaluate the match characterAccount for matchLevel, missing categories and variants; candidates are not installation guarantees.

Merge: OE match ∩ VIN context

A confirmed OE number also found in the VIN parts list is the strongest signal. If sources disagree, do not auto-correct: inspect the source, variant, replacement chain and part image.

02 · Audiences

One process, five operating models

The subject-matter core stays the same. Ownership, storage depth and hand-off points differ by role in the ecosystem.

Market

Marketplaces

Accept verified offers or provide sellers with a guided capture flow.

  • The tenant is the seller or dealer; offers, quotas and evidence remain separate.
  • Publish only after business approval and distinguish vehicle-specific matches from type candidates.
  • Never infer an installation guarantee from an aftermarket reference alone.
  • Derive channel titles and SEO from the verified part identity—not the other way around. /parts/oe/{oeNumber}/seo supplies the listing title, eBay category, item specifics and keywords per marketplace and language.
Recycling

Dismantlers

Dismantlers and parts dealers identify parts in their own system while the API returns the documented results for the dismantling workflow.

  • Capture the label at the storage bin or during dismantling and link it to the internal part ID.
  • Capture the donor VIN once; reuse tapiId and verified vehicle data for its parts.
  • Condition, mileage, location and own photos remain authoritative in the dealer system.
  • Auto-release green matches only; variants, safety parts and conflicts require a specialist.
ERP

ERP

ERP vendors orchestrate the process and store operational data strictly at tenant level.

  • Map each ERP tenant to its own tapinoma workspace/API key and usage limits.
  • Explicitly enable Hub conditions per endpoint through PUT /client/sponsorship-grants/{grantReference}.
  • Enforce your own tenant key on vehicles, parts, scans, decisions and exports. tapinoma has no tenant field: on this side the separation is the sub-user client and its API key.
  • Share master references only where contract and rights permit it; never store raw documents across tenants.
  • Use idempotent import jobs and business states rather than simple “API succeeded” flags.
Dealer

Car dealers

Take in used vehicles with a single call and document them in a structured way.

  • Send a registration-document photo; POST /vehicles/intake returns the vehicle file with the vehicle data.
  • Turn walkaround photos into a structured condition report via POST /vision/condition-report.
  • Generate listing-ready copy from the documented vehicle data with POST /vehicles/{tapiId}/listing.
  • Pricing decisions, own photos and the release to sell remain authoritative in the dealer system.
DMS

DMS

Dealer management systems embed the API as a white-label building block for their dealers.

  • Create a complete workspace per dealer with one call: POST /client/partner-workspaces sets up the sub-client, API key and endpoint enablement, optionally with cost coverage.
  • Like integrators, keep Hub responses in a versioned adapter layer; do not map them directly to UI fields.
  • Process 202 jobs asynchronously and honour Retry-After; avoid tight polling loops.
  • Map every dealer to exactly one sub-client and never share API keys across customers.

03 · Data & tenants

Clear boundaries instead of uncontrolled copies

The customer system remains authoritative for inventory and offers. Hub results are stored as sourced enrichment with a verification state.

Tenant-scoped

Never mix between customers

  • Internal part and vehicle IDs
  • Scan job and image reference
  • Condition, location, purchase, seller
  • Verification decision and export state
  • Usage, quota and cost centre

Referenceable

Only to the extent contractually permitted

  • Normalised OE number
  • tapiId as stable vehicle reference
  • Replacement chain and catalogue response
  • Technical designations
  • API and mapping version

Temporary / minimised

Short retention, narrow purpose

  • Raw registration-document image
  • Personal document fields
  • Publicly retrievable scan URL
  • Error payloads containing inputs
  • Debug and support exports
01 · Intakesource_captureTenant, internal ID, image reference, purpose, time
02 · Candidatepart_candidateRecognised numbers and attributes, not released yet
03 · Referencecatalog_matchOE response, replacement chain, VIN context, matchLevel
04 · ReviewverificationTraffic light, reasons, reviewer or automation rule
05 · Outputchannel_offerPrice, content, channel state and export version

04 · API recipes

The workflow as a concrete call chain

These examples show orchestration. Required fields, complete response schemas, terms of use and current prices are in the API documentation.

POST1. Extract the full label/scanner/label/extract-all

Purpose: Capture possible part numbers and other useful attributes.

  • Start with standard.
  • All numbers remain candidates.
  • Revoke or delete the image URL afterwards.
curl -X POST \
  'https://api.tapinomahub.com/scanner/label/extract-all' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "imageUrl": "https://files.example/label-4711.jpg",
    "quality": "standard"
  }'
GET2. Confirm and enrich the OE number/parts/oe/{oeNumber}

Purpose: Confirm an OE number and retrieve its publicly available parts context.

  • Query every plausible candidate separately.
  • HTTP 200 returns a confirmed OE match in the required part field.
  • A successful response contains exactly oeNumber, normalizedOeNumber, tapiGenArt, vdi, part, fitment, replacementChain, references, and referenceNumbers. part.name is optional and may be null.
  • fitment contains the available type assignments and may be empty.
  • references groups confirmed reference and comparison numbers by manufacturer in numbers; referenceNumbers contains only oe_oem_reference_numbers, the consolidated list including the confirmed OE number.
  • replacementChain contains confirmed directed from/to edges. The reference views are not derived from the chain, nor is the chain derived from them.
  • tapiGenArt and vdi are independent best-effort enrichments. null and [] respectively do not block the confirmed base match or the other classification.
  • 404 means no OE match was found; 422 indicates an ambiguous resolution.
  • Only after a match, optionally add /parts/oe/{oeNumber}/aftermarket-references, /parts/oe/{oeNumber}/price and /parts/oe/{oeNumber}/seo.
curl \
  -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/parts/oe/5Q0919275C'

# Optional only after a confirmed OE match:
# /parts/oe/5Q0919275C/aftermarket-references
# /parts/oe/5Q0919275C/price
# /parts/oe/5Q0919275C/seo
GET2a. Optimise the article for eBay and marketplaces/parts/oe/{oeNumber}/seo

Purpose: Turn a confirmed OE number into the publication-ready article: listing title, marketplace category, item specifics, search keywords and shop SEO text.

  • marketplaceId selects the marketplace. The documented values are the eBay marketplaces EBAY_AT, EBAY_AU, EBAY_BE, EBAY_CA, EBAY_CH, EBAY_DE, EBAY_ES, EBAY_FR, EBAY_GB, EBAY_HK, EBAY_IE, EBAY_IT, EBAY_NL, EBAY_PL, EBAY_SG and EBAY_US; the default is EBAY_DE.
  • language selects the content language from de, en, fr, es, it, nl, pl and zh; vehicleType is car or motorcycle.
  • content.ebayTitle is the article title for the eBay listing headline, within the documented 80-character limit.
  • categoryId is the category of the requested marketplace, so the eBay category for an EBAY_* marketplace. The field is always present and may be null.
  • itemSpecifics carries the item specifics as {name, value[]}, keywords the search terms and product the product naming.
  • content.title, content.h1, content.metaTitle, content.metaDescription, content.slug and content.bulletPoints fill your own shop page.
  • 404 seo_no_exact_match is the documented no-match answer, not a failure of the workflow.
  • 429 seo_live_requests_paused states through X-Tapinoma-Live-Available-At when live enrichment can be requested again.
  • No Idempotency-Key. Review the content before publication: it is publication copy, never a fitment statement.
curl \
  -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/parts/oe/5Q0919275C/seo?marketplaceId=EBAY_DE&language=de&vehicleType=car'
POST3. Turn a registration document into vehicle data/scanner/document/registration/international

Purpose: Capture the VIN, normalised core fields, and country-specific document fields from an image or PDF.

  • Use the canonical international path for new integrations; /scanner/registration-document/v2 remains a deprecated compatibility alias without an HTTP redirect and returns the identical response.
  • fileUrl is canonical; imageUrl and imageURL are compatibility aliases only.
  • quality=standard is the only processing level offered for this personal-document analysis.
  • Do not retain personal fields for the parts process.
  • Check the VIN for OCR errors before subsequent calls and do not treat the source document as a permanent vehicle record.
curl -X POST \
  'https://api.tapinomahub.com/scanner/document/registration/international' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "fileUrl": "https://files.example/registration-4711.pdf",
    "quality": "standard"
  }'
POST3a. Read the VIN directly from a vehicle photo/scanner/vin/extract

Purpose: Read a complete VIN through the windshield, from a door-jamb label, or from a body stamp.

  • Incomplete or ambiguous readings return vin: null.
  • Send images only, not PDFs, to this endpoint.
  • Start with standard and increase to enhanced or maximum only when needed.
curl -X POST \
  'https://api.tapinomahub.com/scanner/vin/extract' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "imageUrl": "https://files.example/windshield-vin.jpg",
    "quality": "standard"
  }'
GET4. Bind the vehicle, request parts, track the job/vin/{vin}/vehicle → /vin/{vin}/parts

Purpose: Receive a stable vehicle reference and parts list with a machine-readable match character.

  • Call GET /vin/{vin}/vehicle with the agreed provider selection value.
  • On redirect_required, complete the documented redirect flow and retain the returned tapiId.
  • After vehicle lookup, omit provider from the parts request; a conflicting value returns vin_provider_mismatch.
  • Every item contains exactly one tapinomahub GenArt in the required tapiGenArt field, for example TGA-000001, plus the required parts[].vdi field with confirmed full VDI 4081 codes. Without a valid mapping, parts[].vdi remains present as []. Read the result character only from matchLevel.
  • On 202, honour Location and Retry-After; query the returned job status URL or GET /vin/parts/jobs/{jobId}. Status retrieval belongs to the original order and does not create a second order.
  • Billing and refunds follow the documented response states and agreed terms.
# Vehicle lookup with selection value 2
curl -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/WVWZZZ1JZXW000001/vehicle?country=gb&provider=2'

# Do not send the selection value again for parts
curl -i -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/WVWZZZ1JZXW000001/parts?country=gb'

# On 202 only: query the status URL from the response
curl -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/parts/jobs/<JOB_ID>'
PUT5. Actively sponsor Hub conditions/client/sponsorship-grants/{grantReference}

Purpose: An ERP explicitly makes its conditions available to selected tapinoma workspaces for Hub requests.

  • The ERP master calls the endpoint with its own API key.
  • Workspace, endpoints, the hub channel and period are explicit.
  • The UI reads incoming grants from GET /client/sponsorship-grants/received and displays sponsor, coverage and status.
  • Revocation stops only future sponsorship; it does not remove the direct tapinoma account or existing results.
curl -X PUT \
  'https://api.tapinomahub.com/client/sponsorship-grants/erp-customer-4711' \
  -H 'X-Api-Key: <ERP_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{"beneficiaryClientId":4711,"endpointKeys":["vin.vehicle","vin.parts"],"channels":["hub"]}'

05 · Quality

A traffic light with explainable reasons

The traffic light is a recommendation for the customer system, not a Hub API field. It must be derived from evidence and business rules.

Green · eligible for auto-release

Confirmed, unambiguous OE match; plausible label manufacturer and—where available—a match in a vehicle-specific VIN parts list. No unresolved variant.

Amber · specialist review

Multiple number candidates, replacement chain, VIN type candidates, unverified vehicle assignment, missing category or conflicting variant attributes.

Red · do not publish

No confirmable OE match, conflicting manufacturer/number, unreadable image, conflicting selection value or missing authority to process the data.

Definition of done

A part is complete when:

  • Tenant and internal part ID are unambiguous.
  • The OE number is normalised and confirmed.
  • On the VIN path, the returned tapinomahub GenArt from the required parts[].tapiGenArt field, for example TGA-000001, and the required parts[].vdi array are stored, including when that array is empty.
  • On the OE-only path, HTTP 200 returned the required part field and the response fields needed by the workflow were processed; 404 was handled when no match was found.
  • Source, time and API/mapping version are recorded.
  • VIN context and matchLevel have been considered where available.
  • Condition, images and commercial data come from the dealer.
  • Release reason and channel state are traceable.

Common anti-patterns

These shortcuts create expensive returns:

  • Saving OCR output directly as the part number.
  • Presenting an aftermarket reference as an installation guarantee.
  • Changing the provider selection value inconsistently after vehicle lookup.
  • Treating 202 as an error or completed parts list.
  • Storing document images permanently or across tenants.
  • Generating SEO copy before identifying the part.

06 · Operations

Turn HTTP status into work states

Integrations should translate HTTP responses into domain states and branch within each status class on the stable error field. message is human-readable text, not a reliable program key.

Idempotency is a state machine: A write operation supports it only when the API reference lists the Idempotency-Key request parameter; that declared parameter is the sole feature signal. The first success reports X-Tapinoma-Idempotency-Stored: true or false to say whether its response was stored for 24 hours. With true, the same idempotency key and same payload replay the stored response. With false, the same idempotency key returns 409 idempotency_result_unavailable: reconcile state and never generate a new idempotency key automatically. A concurrent request with the same idempotency key returns 409 idempotency_request_in_progress with Retry-After; wait and then send the same idempotency key again. The raw-key calls POST /client/users, POST /client/users/{clientId}/keys, and POST /client/partner-workspaces accept no Idempotency-Key (400 idempotency_key_not_supported); after an ambiguous outcome, reconcile client, workspace, and key state through GET requests.
ResponseTypical error codesBusiness stateCustomer-system actionAutomation
200—Result availableStore response, run rules, update verification light.Yes, when business criteria pass.
202—Job acceptedStore the job ID and returned status URL; query only after Retry-After. A redirectUrl, by contrast, belongs only to the browser-redirect flow.Yes, asynchronously.
400bad_request, invalid_json, idempotency_key_not_supported, endpoint-specific validation codesInvalid requestCorrect the input or mapping. For idempotency_key_not_supported, remove the header; if an earlier raw-key call had an ambiguous outcome, reconcile through GET before any further action.No.
401missing_api_keyAuthentication missingCheck the server-side key configuration; never expose the key in the browser or logs.No.
402insufficient_credits, partner_terms_not_covered, sponsorship_cap_reachedBilling blockedResolve the plan, balance, sponsorship, or monthly cap.Only after commercial resolution.
403invalid_api_key, endpoint_not_allowed, sandbox_endpoint_unavailableAccess or endpoint deniedCheck key status, endpoint enablement, and environment.No.
404oe_part_not_found, vin_parts_job_not_found, endpoint-specific not-found codesResource or result not foundUse error to distinguish a missing candidate from a lost or foreign job.No automatic release.
409/422redirect_required, vin_provider_mismatch, idempotency_key_conflict, idempotency_request_in_progress, idempotency_result_unavailable, ambiguous_oe_numberInteraction or clarification neededAfter idempotency_request_in_progress, wait for Retry-After and send the same idempotency key. For idempotency_result_unavailable, reconcile state and do not generate a new idempotency key automatically. Drive every other case by error; do not retry blindly or silently select a candidate.Guided.
429rate_limit_exceeded, client_request_in_progressRate or concurrency limitObserve Retry-After and delay per tenant.Backoff, no retry storm.
5xxinternal_error, endpoint-specific unavailable codesTemporarily unavailableIdentify a retry-safe write by its documented Idempotency-Key parameter, then retry with the same idempotency key and capped backoff. After an ambiguous outcome from any of the three raw-key POSTs, reconcile through GET first; never retry blindly.Capped backoff; reconcile one-time key issuance.

Ready for the technical implementation?

The API documentation contains every endpoint, schema, response field and binding usage notice—including recalls, economic evaluation, vehicle intake, and further Vision workflows. This guide describes the recommended customer-system orchestration.

Open API documentation

Pratiques & processus · Pièces automobiles

De la pièce isolée à la bonne identité.

Un processus de bout en bout fiable pour les places de marché, recycleurs, éditeurs d’ERP, négociants automobiles et dealer management systems (DMS), avec séparation stricte des mandants et décisions de contrôle explicables.

Deux points d’entrée, une fiche pièce cohérente.

01 · Processus idéal

Deux parcours fiables vers l’identité d’une pièce

Chaque parcours peut fonctionner seul. Si l’étiquette et le véhicule donneur sont disponibles, fusionnez-les : le numéro OE identifie la pièce et le VIN fournit le contexte véhicule.

A

Étiquette → requête OE

Idéal pour les pièces déposées, stockées ou livrées individuellement.

  1. Capturer l’imagePhotographier l’étiquette de face, nettement et en entier ; vérifier les droits sur l’image et l’autorisation de transmission.
  2. Extraire tous les attributsCommencer par POST /scanner/label/extract-all avec quality=standard ; augmenter seulement si nécessaire.
  3. Traiter les numéros comme candidatsConserver séparément primaryPartNumber, les autres numéros, le fabricant, la variante et les données de production.
  4. Confirmer d’abord le résultat OEContrôler chaque numéro plausible avec GET /parts/oe/{oeNumber}. HTTP 200 renvoie un résultat confirmé dans le champ obligatoire part ; sans résultat, le Hub renvoie 404. Tenir compte de la chaîne de remplacement renvoyée.
  5. Enrichir si utileNe demander références aftermarket, évaluation de prix et SEO qu’après un résultat OE confirmé.
  6. Définir l’état de contrôleConsigner correspondances, contradictions et sources sur la fiche du mandant ; transmettre les cas ambigus au contrôle manuel.
B

Carte grise → VIN & pièces VIN

Idéal pour les recycleurs, la réception de véhicules et les pièces d’un véhicule donneur connu.

  1. Capturer le documentScanner uniquement avec une autorisation valable ; minimiser les champs personnels conservés par le système client.
  2. Extraire et valider le VINUtiliser POST /scanner/vin/extract pour une photo du véhicule ou POST /scanner/document/registration/international pour les données internationales normalisées d’une image/PDF ; vérifier les 17 caractères. Le contrat national se trouve sous POST /scanner/document/registration.
  3. Identifier le véhiculeAppeler GET /vin/{vin}/vehicle avec la valeur de sélection provider convenue. Si l’API renvoie redirect_required, suivre le parcours de redirection documenté.
  4. Conserver la référence stableEnregistrer tapiId, l’affichage véhicule et la valeur provider choisie sur le véhicule du mandant.
  5. Véhicule VIN, puis pièces VINAppeler GET /vin/{vin}/parts sans valeur provider contradictoire. Sur 202, interroger l’URL du job selon Retry-After.
  6. Évaluer la nature du résultatPrendre en compte matchLevel, catégories manquantes et variantes ; un candidat n’est pas une garantie de montage.

Fusion : correspondance OE ∩ contexte VIN

Un numéro OE confirmé également présent dans la liste VIN constitue le signal le plus fort. En cas de divergence, ne pas corriger automatiquement : contrôler source, variante, chaîne de remplacement et photo de la pièce.

02 · Publics

Un processus, cinq modèles opérationnels

Le cœur métier reste identique. La responsabilité, la profondeur de stockage et le point de transfert diffèrent selon le rôle dans l’écosystème.

Market

Places de marché

Reçoivent des offres déjà contrôlées ou proposent une saisie guidée aux vendeurs.

  • Le mandant est le vendeur ou négociant ; offres, quotas et justificatifs restent séparés.
  • Publier après validation métier en distinguant résultat spécifique au véhicule et candidat au niveau du type.
  • Ne jamais déduire une garantie de montage d’une seule référence aftermarket.
  • Dériver titres de canal et SEO de l’identité vérifiée de la pièce, jamais l’inverse. /parts/oe/{oeNumber}/seo fournit le titre d’annonce, la catégorie eBay, les caractéristiques de l’objet et les mots-clés par marketplace et par langue.
Recycling

Recycleurs

Recycleurs et négociants en pièces identifient les pièces dans leur propre système ; l’API renvoie les résultats documentés pour le processus de démontage.

  • Photographier l’étiquette au lieu de stockage ou pendant le démontage et la relier à l’ID interne.
  • Saisir une fois le VIN donneur ; réutiliser tapiId et les données véhicule vérifiées pour ses pièces.
  • État, kilométrage, emplacement et photos propres restent maîtres dans le système du négociant.
  • Automatiser seulement les résultats verts ; variantes, pièces de sécurité et contradictions exigent un spécialiste.
ERP

ERP

Les éditeurs d’ERP orchestrent le processus et stockent les données opérationnelles strictement au niveau du mandant.

  • Associer chaque mandant ERP à son propre workspace tapinoma/clé API et à ses limites.
  • Activer explicitement les conditions Hub par endpoint avec PUT /client/sponsorship-grants/{grantReference}.
  • Imposer votre propre clé de mandant aux véhicules, pièces, scans, décisions et exports. tapinoma n’a pas de champ mandant : de ce côté, la séparation vient du sous-utilisateur et de sa clé API.
  • Partager les références maîtres uniquement si contrat et droits l’autorisent ; ne jamais stocker les documents bruts entre mandants.
  • Utiliser des imports idempotents et des états métier plutôt qu’un simple indicateur « API réussie ».
Dealer

Négociants automobiles

Réceptionnent les véhicules d’occasion en un seul appel et les documentent de façon structurée.

  • Envoyer une photo de la carte grise ; POST /vehicles/intake renvoie le dossier véhicule avec les données du véhicule.
  • Transformer les photos du tour du véhicule en rapport d’état structuré avec POST /vision/condition-report.
  • Générer un texte d’annonce prêt à publier à partir des données documentées avec POST /vehicles/{tapiId}/listing.
  • Décision de prix, photos propres et validation de vente restent maîtres dans le système du négociant.
DMS

DMS

Les dealer management systems intègrent l’API comme brique en marque blanche pour leurs négociants.

  • Créer un workspace complet par négociant en un appel : POST /client/partner-workspaces met en place sous-client, clé API et activation des endpoints, avec prise en charge des coûts en option.
  • Comme les intégrateurs, conserver les réponses Hub dans une couche d’adaptation versionnée ; ne pas les lier directement aux champs d’interface.
  • Traiter les jobs 202 de façon asynchrone en respectant Retry-After ; éviter les boucles de polling serrées.
  • Associer chaque négociant à un seul sous-client et ne jamais partager les clés API entre clients.

03 · Données & mandants

Des frontières claires plutôt que des copies incontrôlées

Le système client reste maître du stock et des offres. Les résultats Hub sont enregistrés comme enrichissements sourcés avec un état de contrôle.

Lié au mandant

Ne jamais mélanger entre clients

  • IDs internes de pièce et véhicule
  • Job de scan et référence d’image
  • État, emplacement, achat, vendeur
  • Décision de contrôle et état d’export
  • Utilisation, quota et centre de coûts

Référençable

Seulement dans le cadre contractuel

  • Numéro OE normalisé
  • tapiId comme référence véhicule stable
  • Chaîne de remplacement et réponse catalogue
  • Désignations techniques
  • Versions API et mapping

Temporaire / minimisé

Durée courte, finalité étroite

  • Image brute de la carte grise
  • Champs personnels du document
  • URL de scan publiquement accessible
  • Payloads d’erreur contenant les entrées
  • Exports de débogage et support
01 · Entréesource_captureMandant, ID interne, référence d’image, finalité, date
02 · Candidatpart_candidateNuméros et attributs reconnus, pas encore validés
03 · Référencecatalog_matchRéponse OE, chaîne, contexte VIN, matchLevel
04 · ContrôleverificationFeu, motifs, contrôleur ou règle automatique
05 · Sortiechannel_offerPrix, contenu, état canal et version d’export

04 · Recettes API

Le processus sous forme d’une chaîne d’appels

Ces exemples montrent l’orchestration. Les champs obligatoires, schémas complets, conditions d’utilisation et prix actuels figurent dans la documentation API.

POST1. Extraire l’étiquette complète/scanner/label/extract-all

Objectif : recueillir les numéros potentiels et autres attributs utiles.

  • Commencer avec standard.
  • Tous les numéros restent des candidats.
  • Révoquer ou supprimer l’URL de l’image ensuite.
curl -X POST \
  'https://api.tapinomahub.com/scanner/label/extract-all' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "imageUrl": "https://files.example/etiquette-4711.jpg",
    "quality": "standard"
  }'
GET2. Confirmer et enrichir le numéro OE/parts/oe/{oeNumber}

Objectif : confirmer un numéro OE et récupérer le contexte pièce disponible publiquement.

  • Interroger chaque candidat plausible séparément.
  • HTTP 200 renvoie un résultat OE confirmé dans le champ obligatoire part.
  • Une réponse réussie contient exactement oeNumber, normalizedOeNumber, tapiGenArt, vdi, part, fitment, replacementChain, references et referenceNumbers. part.name est facultatif et peut valoir null.
  • fitment contient les affectations de type disponibles et peut être vide.
  • references regroupe les références et numéros de comparaison confirmés par manufacturer dans numbers ; referenceNumbers contient uniquement oe_oem_reference_numbers, la liste consolidée incluant le numéro OE confirmé.
  • replacementChain contient les arêtes dirigées from/to confirmées. Les vues de référence ne sont pas dérivées de cette chaîne, et inversement.
  • tapiGenArt et vdi sont des enrichissements indépendants en best effort. Respectivement null et [] ne bloquent ni le résultat de base confirmé ni l’autre classification.
  • 404 signifie qu’aucun résultat OE n’a été trouvé ; 422 indique une résolution ambiguë.
  • Après un résultat uniquement, ajouter si besoin /parts/oe/{oeNumber}/aftermarket-references, /parts/oe/{oeNumber}/price et /parts/oe/{oeNumber}/seo.
curl \
  -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/parts/oe/5Q0919275C'

# Facultatif uniquement après un résultat OE confirmé :
# /parts/oe/5Q0919275C/aftermarket-references
# /parts/oe/5Q0919275C/price
# /parts/oe/5Q0919275C/seo
GET2a. Optimiser l’article pour eBay et les marketplaces/parts/oe/{oeNumber}/seo

Objectif : transformer un numéro OE confirmé en article prêt à publier : titre de l’annonce, catégorie de la marketplace, caractéristiques de l’objet, mots-clés et texte SEO de la boutique.

  • marketplaceId choisit la marketplace. Les valeurs documentées sont les marketplaces eBay EBAY_AT, EBAY_AU, EBAY_BE, EBAY_CA, EBAY_CH, EBAY_DE, EBAY_ES, EBAY_FR, EBAY_GB, EBAY_HK, EBAY_IE, EBAY_IT, EBAY_NL, EBAY_PL, EBAY_SG et EBAY_US ; la valeur par défaut est EBAY_DE.
  • language choisit la langue du contenu parmi de, en, fr, es, it, nl, pl et zh ; vehicleType vaut car ou motorcycle.
  • content.ebayTitle est le titre de l’article pour l’en-tête de l’annonce eBay, dans la limite documentée de 80 caractères.
  • categoryId est la catégorie de la marketplace demandée, donc la catégorie eBay pour une marketplace EBAY_*. Le champ est toujours présent et peut valoir null.
  • itemSpecifics fournit les caractéristiques de l’objet sous forme {name, value[]}, keywords les mots-clés et product la dénomination produit.
  • content.title, content.h1, content.metaTitle, content.metaDescription, content.slug et content.bulletPoints alimentent votre propre boutique.
  • 404 seo_no_exact_match est la réponse documentée d’absence de correspondance, pas une erreur du processus.
  • 429 seo_live_requests_paused indique via X-Tapinoma-Live-Available-At la prochaine tentative possible.
  • Pas d’Idempotency-Key. Vérifier le contenu avant publication : c’est un texte de publication, jamais une affirmation de compatibilité.
curl \
  -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/parts/oe/5Q0919275C/seo?marketplaceId=EBAY_DE&language=de&vehicleType=car'
POST3. Transformer la carte grise en données véhicule/scanner/document/registration/international

Objectif : saisir le VIN, les champs centraux normalisés et les champs nationaux depuis une image ou un PDF de la carte grise.

  • Utiliser le chemin international canonique pour les nouvelles intégrations ; /scanner/registration-document/v2 reste un alias de compatibilité obsolète sans redirection HTTP et renvoie une réponse identique.
  • fileUrl est le paramètre canonique ; imageUrl et imageURL ne sont que des alias de compatibilité.
  • quality=standard est le seul niveau de traitement proposé pour cette analyse de document personnel.
  • Ne pas conserver les champs personnels pour le processus pièce.
  • Vérifier les erreurs de lecture du VIN avant les appels suivants et ne pas traiter le document source comme justificatif permanent du véhicule.
curl -X POST \
  'https://api.tapinomahub.com/scanner/document/registration/international' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "fileUrl": "https://files.example/carte-grise-4711.pdf",
    "quality": "standard"
  }'
POST3a. Lire directement le VIN sur une photo du véhicule/scanner/vin/extract

Objectif : lire un VIN complet à travers le pare-brise, sur une étiquette de montant de porte ou une frappe de carrosserie.

  • Une lecture incomplète ou ambiguë renvoie vin: null.
  • Envoyer uniquement des images, pas de PDF, à cet endpoint.
  • Commencer par standard et passer à enhanced ou maximum seulement si nécessaire.
curl -X POST \
  'https://api.tapinomahub.com/scanner/vin/extract' \
  -H 'X-Api-Key: <API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "imageUrl": "https://files.example/vin-pare-brise.jpg",
    "quality": "standard"
  }'
GET4. Lier le véhicule, demander les pièces, suivre le job/vin/{vin}/vehicle → /vin/{vin}/parts

Objectif : recevoir une référence véhicule stable et une liste de pièces avec une nature de résultat lisible par machine.

  • Appeler GET /vin/{vin}/vehicle avec la valeur de sélection provider convenue.
  • Sur redirect_required, terminer le parcours de redirection documenté et conserver la tapiId renvoyée.
  • Après la requête véhicule, omettre provider dans la requête pièces ; une valeur contradictoire renvoie vin_provider_mismatch.
  • Chaque élément contient exactement une GenArt tapinomahub dans le champ obligatoire tapiGenArt, par exemple TGA-000001, ainsi que le champ obligatoire parts[].vdi avec les codes VDI 4081 complets et confirmés. Sans correspondance valide, parts[].vdi reste présent sous la forme []. Lire la nature du résultat uniquement dans matchLevel.
  • Sur 202, respecter Location et Retry-After ; interroger l’URL d’état du job renvoyée ou GET /vin/parts/jobs/{jobId}. La consultation du statut appartient à la commande initiale et ne crée pas de seconde commande.
  • La facturation et les remboursements suivent les états de réponse documentés et les conditions convenues.
# Recherche véhicule avec la valeur de sélection 2
curl -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/WVWZZZ1JZXW000001/vehicle?country=fr&provider=2'

# Ne pas renvoyer la valeur de sélection pour les pièces
curl -i -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/WVWZZZ1JZXW000001/parts?country=fr'

# Sur 202 uniquement : interroger l’URL d’état de la réponse
curl -H 'X-Api-Key: <API_KEY>' \
  'https://api.tapinomahub.com/vin/parts/jobs/<JOB_ID>'
PUT5. Prendre activement en charge les conditions Hub/client/sponsorship-grants/{grantReference}

Objectif : un ERP met explicitement ses conditions à disposition de workspaces tapinoma sélectionnés pour les requêtes Hub.

  • Le client maître ERP appelle l’endpoint avec sa propre clé API.
  • Workspace, endpoints, canal hub et période sont explicites.
  • L’interface lit les prises en charge reçues avec GET /client/sponsorship-grants/received et affiche sponsor, périmètre et état.
  • La révocation arrête uniquement les futures prises en charge sans supprimer le compte tapinoma direct ni les résultats existants.
curl -X PUT \
  'https://api.tapinomahub.com/client/sponsorship-grants/erp-customer-4711' \
  -H 'X-Api-Key: <ERP_API_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{"beneficiaryClientId":4711,"endpointKeys":["vin.vehicle","vin.parts"],"channels":["hub"]}'

05 · Qualité

Un feu dont les motifs sont explicables

Le feu est une recommandation pour le système client, pas un champ de l’API Hub. Il doit découler de signaux prouvables et de règles métier.

Vert · publiable automatiquement

Correspondance OE confirmée et sans ambiguïté, fabricant plausible et, si disponible, correspondance dans une liste VIN spécifique au véhicule. Aucune variante non résolue.

Orange · contrôle spécialiste

Plusieurs numéros candidats, chaîne de remplacement, candidats VIN au niveau du type, affectation véhicule non vérifiée, catégorie manquante ou variante contradictoire.

Rouge · ne pas publier

Aucun résultat OE confirmable, fabricant/numéro contradictoire, image illisible, valeur de sélection contradictoire ou absence d’autorisation de traitement.

Critères de fin

Une pièce est prête lorsque :

  • Mandant et ID interne sont sans ambiguïté.
  • Le numéro OE est normalisé et confirmé.
  • Dans le parcours VIN, la GenArt tapinomahub renvoyée dans le champ obligatoire parts[].tapiGenArt, par exemple TGA-000001, ainsi que le tableau obligatoire parts[].vdi sont enregistrés, y compris lorsque ce tableau est vide.
  • Dans le parcours OE seul, HTTP 200 a renvoyé le champ obligatoire part et les champs nécessaires au processus ont été traités ; 404 a été géré si aucun résultat n’a été trouvé.
  • Source, date et versions API/mapping sont enregistrées.
  • Le contexte VIN et matchLevel ont été pris en compte si disponibles.
  • État, images et données commerciales proviennent du négociant.
  • Motif de validation et état canal sont traçables.

Erreurs fréquentes

Ces raccourcis génèrent des retours coûteux :

  • Enregistrer directement le résultat OCR comme numéro de pièce.
  • Présenter une référence aftermarket comme garantie de montage.
  • Modifier de façon contradictoire la valeur de sélection provider après la recherche véhicule.
  • Traiter 202 comme erreur ou liste terminée.
  • Stocker durablement les images de documents ou les partager entre mandants.
  • Générer le SEO avant d’identifier la pièce.

06 · Exploitation

Transformer les statuts HTTP en états de travail

Les intégrations doivent traduire les réponses HTTP en états métier et, au sein d’une classe de statut, se ramifier selon le champ stable error. Le champ message est destiné à la lecture humaine, pas à la logique du programme.

L’idempotence est un automate d’états : Une opération d’écriture la prend en charge uniquement lorsque la référence API expose le paramètre de requête Idempotency-Key ; seul ce paramètre déclaré fait foi. Le premier succès indique par X-Tapinoma-Idempotency-Stored: true ou false si sa réponse a été conservée pendant 24 heures. Avec true, la même clé d’idempotence et le même contenu rejouent la réponse enregistrée. Avec false, la même clé d’idempotence renvoie 409 idempotency_result_unavailable : rapprocher l’état et ne jamais générer automatiquement une nouvelle clé d’idempotence. Une requête parallèle avec la même clé d’idempotence renvoie 409 idempotency_request_in_progress avec Retry-After ; attendre, puis réessayer la requête avec la même clé d’idempotence. Les appels qui délivrent une clé en clair — POST /client/users, POST /client/users/{clientId}/keys et POST /client/partner-workspaces — n’acceptent pas Idempotency-Key (400 idempotency_key_not_supported) ; après une issue incertaine, rapprocher par GET l’état des clients, workspaces et clés.
RéponseCodes error typiquesÉtat métierAction du système clientAutomatisation
200—Résultat disponibleEnregistrer la réponse, appliquer les règles, actualiser le feu.Oui, si les critères métier passent.
202—Job acceptéEnregistrer l’ID et l’URL d’état renvoyée ; ne l’interroger qu’après Retry-After. Une redirectUrl appartient en revanche uniquement au parcours de redirection navigateur.Oui, de façon asynchrone.
400bad_request, invalid_json, idempotency_key_not_supported, codes de validation propres à l’endpointRequête invalideCorriger l’entrée ou le mapping. Pour idempotency_key_not_supported, retirer l’en-tête ; si un appel antérieur délivrant une clé a eu une issue incertaine, rapprocher par GET avant toute autre action.Non.
401missing_api_keyAuthentification absenteContrôler la clé côté serveur ; ne jamais l’exposer dans le navigateur ou les logs.Non.
402insufficient_credits, partner_terms_not_covered, sponsorship_cap_reachedFacturation bloquéeRégler le forfait, le solde, la prise en charge ou le plafond mensuel.Après résolution commerciale.
403invalid_api_key, endpoint_not_allowed, sandbox_endpoint_unavailableAccès ou endpoint refuséContrôler l’état de la clé, l’activation et l’environnement.Non.
404oe_part_not_found, vin_parts_job_not_found, codes d’absence propres à l’endpointRessource ou résultat introuvableDistinguer avec error un candidat absent d’un job perdu ou étranger.Pas de validation automatique.
409/422redirect_required, vin_provider_mismatch, idempotency_key_conflict, idempotency_request_in_progress, idempotency_result_unavailable, ambiguous_oe_numberInteraction ou clarification nécessaireAprès idempotency_request_in_progress, attendre Retry-After et réessayer la requête avec la même clé d’idempotence. Pour idempotency_result_unavailable, rapprocher l’état sans générer automatiquement une nouvelle clé d’idempotence. Piloter tous les autres cas par error ; ne pas répéter aveuglément ni choisir silencieusement un candidat.Guidé.
429rate_limit_exceeded, client_request_in_progressLimite de débit ou de concurrenceRespecter Retry-After et temporiser par mandant.Backoff, pas de tempête.
5xxinternal_error, codes d’indisponibilité propres à l’endpointIndisponibilité temporaireIdentifier une écriture répétable par son paramètre documenté Idempotency-Key, puis la réessayer avec la même clé d’idempotence et un backoff plafonné. Après une issue incertaine de l’un des trois POST délivrant une clé en clair, rapprocher d’abord l’état par GET ; ne jamais relancer aveuglément.Backoff plafonné ; rapprocher les clés à affichage unique.

Prêt pour l’implémentation technique ?

La documentation API contient tous les endpoints, schémas, champs de réponse et mentions d’utilisation obligatoires, notamment pour les rappels, l’évaluation économique, la réception des véhicules et d’autres processus Vision. Ce guide décrit l’orchestration recommandée dans le système client.

Ouvrir la documentation API