API Partner-API · Version 1

Zulassungs-API: Anträge aus Ihrer Software über die KBA-Großkundenschnittstelle einreichen

Die Zulassungs-API ist eine REST-Schnittstelle, mit der Fuhrpark-, Händler- und Leasingsoftware Zulassungsanträge an die i-Kfz-Großkundenschnittstelle des KBA übergibt, ohne selbst XKfz-Nachrichten, Zertifikate oder das Postfach des KBA zu betreiben. Anträge werden per JSON geprüft und eingereicht; Statuswechsel und Bescheide kommen per signiertem Webhook zurück.

Was unterscheidet die Zulassungs-API von einer direkten GKS-Anbindung?

Eine direkte Anbindung an die Großkundenschnittstelle verlangt eine Registrierung als Großkunde, SOAP-Nachrichten im Standard XKfz, ein X.509-Zertifikat und einen eigenen Abruf des KBA-Postfachs. Die Zulassungs-API kapselt diese Teile hinter JSON-Endpunkten; Ihre Software spricht REST, der Softwarepartner spricht mit dem KBA.

Direkte GKS-Anbindung und Zulassungs-API im Vergleich
ThemaDirekte GKS-AnbindungZulassungs-API
ProtokollSOAP, XML-Nachrichten im Standard XKfz (seit 02.09.2026 Version 6.0)REST mit JSON, OpenAPI 3.1
ZugangRegistrierung als Großkunde, X.509-ZertifikatAPI-Schlüssel als Bearer-Token, vergeben von DCS
RückmeldungenAbruf aus dem KBA-Postfach, höchstens einmal pro MinuteWebhooks bei Statuswechsel und neuen Bescheiden
TestTestumgebung des KBA nach der RegistrierungSandbox mit eigener Datenbank, Ergebnisse simulierbar
FehlerQuittungscodes in der Antwortnachrichtproblem+json nach RFC 9457 mit request_id

Wie kommt ein Partner von der Sandbox in den Live-Betrieb?

Jeder Zugang startet in der Sandbox: eigene Datenbank, kein Kontakt zum KBA, Schlüssel mit dem Präfix zo24_sbx_. Den Live-Schlüssel (zo24_live_) gibt es erst nach einem erfolgreichen Sandbox-Test; Sandbox-Vorgänge werden nach 30 Tagen automatisch gelöscht.

  1. GET /v1/ping prüft Schlüssel und Zugang, GET /v1/feldregeln liefert die Pflichtfelder je Arbeitsgang.
  2. POST /v1/antraege/pruefen prüft Schema und Plausibilität, ohne das KBA zu kontaktieren.
  3. POST /v1/antraege reicht ein und verlangt einen Idempotency-Key mit 8 bis 128 Zeichen.
  4. POST /v1/sandbox/antraege/{id}/simulieren erzeugt in der Sandbox Ergebnisse, Bescheide und Webhooks.
  5. Nach dem Test schalten wir den Live-Zugang frei; der Aufbau der Aufrufe bleibt gleich, nur Host und Schlüssel ändern sich.
# Antrag in der Sandbox einreichen
# SANDBOX_URL erhalten Sie mit dem Zugang
curl -X POST "$SANDBOX_URL/v1/antraege" \
  -H "Authorization: Bearer zo24_sbx_…" \
  -H "Idempotency-Key: fuhrpark-4711-neuzulassung" \
  -H "Content-Type: application/json" \
  --data @antrag.json

# gleiche Anfrage mit gleichem Schlüssel wiederholt:
# ursprüngliche Antwort + Kopfzeile
Idempotent-Replayed: true

Eine Wiederholung mit gleichem Schlüssel und gleichem Inhalt liefert die ursprüngliche Antwort zurück. Bricht die Verbindung beim Einreichen ab, kann Ihr System also gefahrlos erneut senden, ohne einen zweiten Antrag beim KBA auszulösen.

Welche Endpunkte stellt die Zulassungs-API bereit?

Die API gliedert sich in fünf Bereiche: Zugang, Stammdaten, Anträge, Dokumente und Webhooks. Alle Pfade beginnen mit /v1; die vollständigen Schemas erhalten Partner zusammen mit dem Sandbox-Zugang.

Endpunkte der Partner-API, Version 1.0.0 (Stand 13.09.2026)
MethodePfadZweck
GET/v1/pingSchlüssel und Zugang prüfen
GET/v1/feldregelnPflichtfeldregeln je Arbeitsgang
POST/v1/antraege/pruefenSchema und Plausibilität prüfen, ohne KBA
POST/v1/antraegeAntrag einreichen, Idempotency-Key Pflicht
GET/v1/antraegeAnträge auflisten
GET/v1/antraege/{antrag_id}Antrag abrufen
GET/v1/antraege/{antrag_id}/statusStatus aus der Datenbank, ohne erneute KBA-Abfrage
POST/v1/antraege/{antrag_id}/stornierenstornieren, solange das KBA den Antrag nicht empfangen hat
GET/v1/antraege/{antrag_id}/dokumentesignierte Anhänge eines Antrags
GET/v1/antraege/{antrag_id}/dokumente/{dokument_id}.pdfAnhang als PDF
GET/v1/antraege/{antrag_id}/bescheideeingegangene Bescheide: Zulassungsbescheid, vorläufiger Nachweis, Gebührenbescheid, Abmeldung
GET/v1/antraege/{antrag_id}/bescheide/{nachricht_id}.pdfBescheid als PDF
GET/v1/webhooksWebhooks auflisten
POST/v1/webhooksWebhook anlegen; das Geheimnis wird nur jetzt angezeigt
GET/v1/webhooks/ereignisseverfügbare Ereignisse
DELETE/v1/webhooks/{webhook_id}Webhook löschen
POST/v1/webhooks/{webhook_id}/testTestereignis senden
POST/v1/sandbox/antraege/{id}/simulierennur Sandbox: Ergebnis eines Antrags simulieren

Wie prüft Ihr System die Signatur eines Webhooks?

Jeder Webhook kommt als POST mit den Kopfzeilen Webhook-Id, Webhook-Timestamp (Unix-Sekunden) und Webhook-Signature: v1=<hex>. Die Signatur ist ein HMAC-SHA256 über <Webhook-Id>.<Webhook-Timestamp>.<Body> mit dem Geheimnis, das beim Anlegen des Webhooks einmal angezeigt wurde.

Ereignisse können mehrfach eintreffen: Entdoppeln Sie über Webhook-Id und verwerfen Sie Zeitstempel, die älter als 5 Minuten sind. Die Nutzlast enthält keine personenbezogenen Daten; Einzelheiten holt Ihr System über die verlinkten Endpunkte.

Ihr Endpunkt muss binnen 10 Sekunden mit einem 2xx-Status antworten; Weiterleitungen werden nicht verfolgt. Schlägt eine Zustellung fehl, wiederholen wir sie bis zu sechsmal in wachsenden Abständen von 30 Sekunden, 2 Minuten, 10 Minuten, 1 Stunde, 6 Stunden und 24 Stunden. Nach 50 fehlgeschlagenen Zustellungen in Folge wird der Webhook automatisch deaktiviert.

Webhook-Ereignisse
EreignisAuslöser
antrag.status_geaendertStatus oder Quittungscode eines Antrags hat sich geändert
antrag.bescheid_eingegangenneue Bescheide als PDF liegen vor
# Python: Webhook-Signatur prüfen
import hashlib
import hmac
import time

def webhook_ist_echt(webhook_id, zeitstempel, signatur, body, geheimnis):
    # Zeitstempel in Unix-Sekunden, max. 5 Minuten alt
    if abs(time.time() - int(zeitstempel)) > 300:
        return False
    nachricht = f"{webhook_id}.{zeitstempel}.".encode() + body
    erwartet = "v1=" + hmac.new(
        geheimnis.encode(), nachricht, hashlib.sha256
    ).hexdigest()
    return hmac.compare_digest(erwartet, signatur)

Welche Limits und Fehlerformate gelten für die Zulassungs-API?

Die Limits gelten je API-Schlüssel und werden pro Minute gezählt; wer sie überschreitet, erhält HTTP 429 mit der Kopfzeile Retry-After. Fehler kommen einheitlich als application/problem+json nach RFC 9457 und tragen eine request_id für Rückfragen.

Anfragen allgemein
120 / min
je Schlüssel
Prüfen
30 / min
POST /v1/antraege/pruefen
Einreichen
6 / min
POST /v1/antraege
Idempotency-Key
8–128
Zeichen, Pflicht beim Einreichen

Was kostet der Zugang zur Zulassungs-API?

Der API-Zugang kostet eine einmalige Einrichtungsgebühr und eine monatliche Gebühr. Beide berechnen wir individuell: die Einrichtung nach dem Umfang der Anbindung und der Zahl der Mandanten, die Monatsgebühr nach Betrieb, Betreuung und erwarteter Vorgangsmenge.

Amtliche Gebühren von Zulassungsbehörde und KBA stehen als eigene Rechnungsposition ohne Aufschlag daneben. Beträge nennen wir im Angebot; eine öffentliche B2B-Preisliste gibt es nicht. Für ein Angebot genügen Ihre Software, die gewünschten Vorgangsarten und die ungefähre Menge je Monat.

Häufige Fragen zur Zulassungs-API

Fallen für die API-Anbindung Gebühren an?

Ja. Für die Einrichtung berechnen wir eine einmalige Gebühr, für den laufenden Betrieb eine monatliche Gebühr. Beide richten sich nach Umfang der Anbindung und Vorgangsmenge und stehen in Ihrem Angebot; amtliche Gebühren kommen ohne Aufschlag hinzu.

Brauchen wir für die API eine eigene Registrierung beim KBA?

Nein. Die API-Zugänge vergibt DCS Digital Code Solutions; eingereicht wird über unseren registrierten Großkunden-Zugang. Ihr System braucht weder ein X.509-Zertifikat noch eine eigene Kennung beim KBA.

Wie handelt eine Partnersoftware für mehrere eigene Mandanten?

Partner-Zugänge geben mit der Kopfzeile X-Mandant-Id an, für welchen eigenen Mandanten ein Aufruf gilt. So bedient eine Plattform mehrere Betriebe über einen Schlüssel, und jeder Antrag bleibt dem richtigen Mandanten zugeordnet.

Gibt es eine maschinenlesbare Beschreibung der Schnittstelle?

Ja. Die Schnittstelle ist in OpenAPI 3.1 beschrieben. Diese Beschreibung und die technische Anleitung erhalten Partner zusammen mit ihrem Sandbox-Zugang; daraus lassen sich Clients für die gängigen Programmiersprachen erzeugen.

Kann ein eingereichter Antrag zurückgezogen werden?

Nur solange das KBA ihn noch nicht empfangen hat; dafür gibt es den Endpunkt zum Stornieren. Danach entscheidet die Zulassungsbehörde, und der Status kommt per Webhook zurück.

Sandbox-Zugang anfragen

Beschreiben Sie kurz Ihre Software und die Vorgänge, die Sie anbinden wollen – den Sandbox-Schlüssel vergeben wir nach Rücksprache, zusammen mit einem Angebot für Einrichtung und Monatsgebühr.

Stand der Angaben: · Quelle: Partner-API, Version 1.0.0

Wie planen Sie die Einführung Ihrer Anbindung?

Vereinbaren Sie die benötigten Datenflüsse und die Behandlung von Fehlern vor dem Produktivstart. Unser Umstiegsleitfaden behandelt den Umgang mit offenen Anträgen. Die Auswahlhilfe für Portal und API unterstützt die fachliche Abstimmung mit dem Betrieb.