REST-API & Webhooks für die Kfz-Zulassung.
Zulassung, Umschreibung und Abmeldung direkt aus Ihrem System: JSON über HTTPS, ein Endpunkt je Vorgangsart, Ergebnisse als signierte Ereignisse zurück. Ohne eigene KBA-Registrierung oder mit Ihrem eigenen KoPa-Schlüssel.
- OpenAPI-Beschreibung
- Signierte Webhooks
- Doppelantragsschutz
# BASIS: Ihre API-Adresse aus dem Dashboard curl -u "$API_LOGIN:$API_PASSWORT" \ -H "Content-Type: application/json" \ --data @antrag.json \ "$BASIS/vehicleDeregistrations/deregistrations" # antrag.json { "externalOrderId": "bestellung-4711", "email": "kunde@example.de", "customization": { "productType": "VEHICLE_DEREGISTRATION", "licensePlateNumberComponents": { "usageType": "EURO", "city": "HN", "middle": "LL", "end": "2418" }, "vehicleIdentificationNumber": "WBA65432113218654", "vehicleRegistrationCertificateSecurityCode": "8407251", "frontLicensePlateSecurityCode": "Vbg", "rearLicensePlateSecurityCode": "K7m", "licensePlateReservationIncluded": false, "contractPartner": "U123456" } } # contractPartner: ohne eigenen KoPa-Schlüssel Pflicht, Ihre Vertragspartnernummer # Antwort 200 — das Ergebnis kommt per Webhook { "order": { "id": 1 } }
Drei Schritte bis zum ersten Antrag.
Die Antwort auf einen Antrag kommt sofort und nennt die Auftragsnummer. Der Versand an das KBA läuft im Hintergrund; das Ergebnis erfahren Sie per Webhook oder über die Vorgangsauskunft.
- 1Dashboard
API-Benutzer anlegen
Nach der Freischaltung legen Sie im Dashboard einen API-Benutzer an. Die Basis-Adresse Ihres Mandanten zeigt das Dashboard unter „Anbindung".
- 2lesend
Erster Aufruf
GET /vehicleDeregistrations/orders?limit=1legt nichts an und zeigt, ob Adresse und Anmeldung stimmen. - 3schreibend
Erster Antrag
Zum Beispiel eine Außerbetriebsetzung wie oben. Die Antwort nennt die Auftragsnummer
order.id, mit der Sie später abfragen.
Ein Endpunkt je Vorgangsart.
Die Vorgangsart steckt im Pfad, nicht im Rumpf. Umschreibung, Wiederzulassung, Neu- und Tageszulassung teilen sich ein Anfrageformat. Alle sieben Vorgangsarten sind seit dem 14.09.2026 vom KBA freigeschaltet.
/vehicleRegistrations/registrationsNeuzulassung (NZ)/vehicleRegistrations/dayRegistrationsTageszulassung (TZ)/vehicleTransfers/transfersUmschreibung (UG)/vehicleReRegistrations/reRegistrationsWiederzulassung (WG)/vehicleReRegistrations/sameHolderReRegistrationsWiederzulassung auf denselben Halter (WZ)/vehicleHolderChanges/holderChangesHalteränderung — neue Anschrift (HA)/vehicleDeregistrations/deregistrationsAußerbetriebsetzung (AB)/powerOfAttorneysVollmachtsvorgang anlegen, liefert den Signaturlink/gksConfigurationsEigenen KoPa-Schlüssel samt Zertifikat hinterlegen/powerOfAttorneys/{processId}Stand des Vollmachtsvorgangs/{prefix}/ordersAuftragsliste mit Filtern, etwa nach Stand oder Änderungszeitpunkt/{prefix}/orders/{orderId}Vorgangsauskunft mit Stand, Meldungen und Belegen/{prefix}/files/content/{fileAccessKey}Beleg herunterladen/registrationOffices/{districtKey}/availabilityErreichbarkeit einer Zulassungsbehörde/serviceStatusGemeldete Störungen und angekündigte WartungenPfade relativ zur Basis-Adresse Ihres Mandanten. {prefix} ist der Pfadanfang der Vorgangsart, etwa vehicleTransfers. Alle Felder und Antwortcodes stehen in der Dokumentation nach Anmeldung.
Jeder Zustandswechsel als signiertes Ereignis.
Das erste Ereignis entsteht mit der Quittung des KBA, weitere folgen mit dem Bescheid und nachgereichten Belegen. Je Vorgangsgruppe gibt es einen eigenen Ereignistyp, einzeln abonnierbar.
- Signatur:
X-Signatureals HMAC-SHA256 über den Rohtext des Rumpfs, dazuX-Webhook-Id,X-Event-IdundX-Webhook-Version. - Zustellung: mindestens einmal. Ohne 2xx gibt es insgesamt bis zu sieben Zustellversuche über rund 31 Stunden; danach lässt sich das Ereignis im Dashboard erneut anstoßen.
- Duplikate erkennen: Jede Wiederholung trägt dieselbe
X-Event-Idund einen bitgleichen Rumpf. - Zuordnung:
order.id, Ihreorder.externalId,attemptOfundattemptfür Korrekturversuche, dazulicensePlateundfiles[]. - Test: Ein PING von Hand aus dem Dashboard prüft Erreichbarkeit und Signaturprüfung.
| status | Bedeutung |
|---|---|
ACCEPTED | Das KBA hat den Antrag angenommen. |
FORWARDED | An die zuständige Zulassungsbehörde weitergeleitet. |
APPROVED / APPROVED_ | Positiv beschieden, mit Belegen: Bescheid, vorläufiger Nachweis. |
REJECTED / REJECTED_ | Abgelehnt, mit Code und Klartext in messages[]. |
FAILED | Gescheitert; retryable zeigt, ob es nur vorübergehend war. |
// X-Signature: HMAC-SHA256 über den Rohtext des Rumpfs import { createHmac, timingSafeEqual } from 'node:crypto'; export function signaturIstGueltig(rohtext, signatur, secret) { const erwartet = Buffer.from(createHmac('sha256', secret) .update(rohtext).digest('hex')); const erhalten = Buffer.from(String(signatur ?? '')); return erwartet.length === erhalten.length && timingSafeEqual(erwartet, erhalten); }
Gebaut für Anbindungen, die unbeaufsichtigt laufen.
Was Ihre Integration wissen muss, damit sie keinen Antrag doppelt stellt, keinen verliert und Störungen erkennt.
Doppelantragsschutz
Dieselbe externalOrderId mit derselben FIN löst innerhalb von 15 Minuten am selben Endpunkt keinen zweiten Antrag aus. Mit abweichenden Daten antwortet die Schnittstelle mit 409 und sendet nichts.
Abgleich statt Hoffen
Die Auftragsliste filtert nach Stand und changedSince. So holen Sie nach, was ein ausgefallener Webhook-Empfänger verpasst hat.
Beobachtbar
X-Trace-Id in jeder Antwort, /health ohne Anmeldung, /serviceStatus mit Störungen und Wartungen, retryable für vorübergehende Fehler.
Unter Ihrer eigenen Registrierung übermitteln.
Haben Sie selbst einen Zugang zur Großkundenschnittstelle (GKS) des KBA: Kennung, KoPa-Schlüssel und Zertifikat hinterlegen Sie im Dashboard. Ihre Anträge gehen dann unter Ihrer Kennung hinaus. Die amtlichen Gebühren stellen Ihnen die Zulassungsbehörden und das KBA direkt in Rechnung.
- Per API:
POST /gksConfigurationsnimmt dieselben Angaben entgegen wie das Dashboard. - Verbindung prüfen: ein Test der Anmeldung beim KBA, ohne einen Antrag zu stellen.
- Wählen: Die zurückgegebene
idgeben Sie alsgksConfigurationIdim Antrag mit — auch für den Testzugang. - Gebührenbescheide: Sammelgebührenbescheide der Zulassungsbehörden kommen als Ereignis und sind abrufbar.
Fragen zur Anbindung.
Wo finde ich die vollständige API-Dokumentation?
Wie authentifiziert sich meine Anwendung?
Was passiert, wenn ich einen Antrag versehentlich zweimal sende?
externalOrderId mit derselben FIN löst innerhalb von 15 Minuten am selben Endpunkt keinen zweiten Antrag aus. Weichen die Daten ab, antwortet die Schnittstelle mit 409 und sendet nichts.Kann ich vor dem Produktivbetrieb testen?
gksConfigurationId über ihn, bei einem Testzugang also nicht wirksam. Übermitteln Sie ohne eigenen KoPa-Schlüssel, stimmen wir den Testzugang deshalb vorher mit Ihnen ab. Bei mehreren Zugängen wählen Sie ihn je Antrag mit gksConfigurationId.Brauche ich eine eigene Registrierung beim KBA?
Was kostet die API?
Für Software-Anbieter: Zulassung als Funktion Ihres Produkts
Konto erstellen und die vollständige Dokumentation lesen.
Nach der Anmeldung finden Sie alle Endpunkte, Felder und Meldungscodes. Keine Grundgebühr, keine Mindestabnahme, keine Laufzeit.
Preise netto zzgl. USt. Auch abgelehnte Vorgänge werden berechnet, je vom KBA abgewiesener Übermittlung zusätzlich 0,12 €. Details
