Dokumentation

API-Referenz

POST/api/v1/applications

Produktiven Antrag anlegen

Dieser Aufruf erzeugt einen echten Vorgang. Bei signaturpflichtigen Verfahren folgt die Signatur der antragstellenden Person beziehungsweise des Vertretungsberechtigten; AB wird ohne Signatur direkt weiterverarbeitet.

Beschreibung

Speichert einen produktiven Antrag und liefert den nächsten erforderlichen Schritt.

Parameter

Idempotency-KeyheaderPflicht

Eindeutiger Schlüssel für diese Antragserstellung. Bei Retries unverändert wiederverwenden.

Beispiel: req_019c84f5-7061-7a33-9628-8a32f0ec8cb1

Request-Body

Der Body wird als application/json übertragen. Verwenden Sie ausschließlich die dokumentierten Feldnamen.

Request-Schema

Request-Felder

Der Vorgangscode bestimmt Pflichtfelder, Bedingungen und zulässige Werte.

NZ
Neuzulassung

Erforderlich: FIN, eVB, ZB-II-Nummer, ZB-II-Sicherheitscode und Kennzeichenoption.

Pflicht immer sendenBedingt Bedingung im Text beachten
FeldTypAngabeBeschreibung
procedurestringPflichtVorgangscode: AB, WG, WZ, NZ, TZ, UG oder HA.
holder_idstringBedingtBei third_party erforderlich. Bei company wird der Dashboard-Halter verwendet.
contract_partner_idstringOptionalID eines im Dashboard hinterlegten Vertragspartners (cpt_…). KOPA-Schlüssel und Stammdaten werden intern aufgelöst und nicht im API-Request gesendet.
external_referencestringOptionalEigene Auftrags- oder Fahrzeugreferenz; maximal 120 Zeichen.
vehicle.vinstringPflicht17-stellige Fahrzeug-Identifizierungsnummer ohne I, O oder Q.
vehicle.typeenumOptionalcar, motorcycle oder trailer; Standard ist car.
vehicle.drive_typeenumBedingtcombustion, hybrid oder electric; nur bei Anhängern nicht erforderlich.
vehicle.evb_numberstringPflichtSiebenstellige elektronische Versicherungsbestätigung.
registration.certificate_part_2.numberstringPflichtDokumentennummer der ZB II mit maximal zwölf Zeichen.
registration.certificate_part_2.security_codestringPflichtZwölfstelliger Sicherheitscode der ZB II.
registration.license_plate.optionenumPflichtreserved oder next_available; keep ist bei NZ nicht erlaubt.
registration.license_plate.reservation_idstringBedingtID einer Reservierung aus /api/v1/license-plate-reservations.
payment.ibanstringBedingtBei third_party erforderlich. Bei company verwendet die API die im Dashboard hinterlegte IBAN.
signer.emailemailBedingtErforderlich, wenn weder beim Halter noch in Ihrem Dashboard-Konto eine E-Mail-Adresse hinterlegt ist.
Optionale Felder

Felder für Kennzeichenoptionen, Zustellung, Steuer und Zusatzbestellungen.

FeldTypAngabeBeschreibung
submission_modeenumOptionalcompany oder third_party. Wird aus holder_id beziehungsweise holder abgeleitet; mit contract_partner_id bedeutet company, dass der Vertragspartner zugleich Antragsteller und Halter ist.
signature_profile_idstringOptionalSignaturprofil (sgp_…) aus demselben Konto und derselben Umgebung. Bestimmt Absendername, Logo und Redirect der Signaturanfrage.
vehicle.electric_platebooleanOptionalE-Kennzeichen für das neu zugeteilte Kennzeichen anfordern. Nicht zusammen mit historic_plate.
vehicle.historic_platebooleanOptionalH-Kennzeichen für das neu zugeteilte Kennzeichen anfordern. Nicht zusammen mit electric_plate.
vehicle.requested_registration_datedateOptionalGewünschtes Datum der Erstzulassung im Format YYYY-MM-DD.
registration.license_plate.{district,letters,number,pin}stringsBedingtAlternative zu reservation_id, wenn ein extern reserviertes Kennzeichen verwendet wird.
registration.license_plate.seasonalobjectOptionalSaisonzeitraum für das neue Kennzeichen.
payment.account_holderstringOptionalKontoinhaber; wird andernfalls aus dem Halter abgeleitet.
payment.bicstringOptionalBIC mit acht oder elf Zeichen.
payment.tax_exemptbooleanOptionalBeantragung einer Kfz-Steuerbefreiung; Standard ist false.
registration.authorized_partyobjectOptionalBevollmächtigte Person oder Firma mit vollständiger Anschrift.
registration.delivery.part_1 / part_2objectOptionalAbweichende Zustellung oder Abholung von ZB I und ZB II.
additional_services.license_plates.orderedbooleanOptionalKennzeichenschilder antragsgebunden bestellen; nicht bei Beibehaltung des bisherigen Kennzeichens.
additional_services.license_plates.{quantity,size}integer, enumBedingtBei Bestellung optional: 1–10 Schilder und eines der dokumentierten Formate.
additional_services.emissions_sticker.orderedbooleanOptionalFeinstaubplakette antragsgebunden bestellen; nur für Pkw.
Request-Beispiel · NZJSON
{
  "procedure": "NZ",
  "holder_id": "hld_live_7f3a92c41b6d8e2054fa1c09",
  "external_reference": "fleet-2026-nz-0042",
  "vehicle": {
    "vin": "WVWZZZ1JZXW000001",
    "type": "car",
    "drive_type": "combustion",
    "evb_number": "ABCD123"
  },
  "registration": {
    "certificate_part_2": {
      "number": "ZB2A123456",
      "security_code": "B1234567890X"
    },
    "license_plate": {
      "option": "next_available"
    }
  },
  "payment": {
    "iban": "DE89370400440532013000",
    "account_holder": "Mara Beispiel",
    "tax_exempt": false
  },
  "additional_services": {
    "license_plates": {
      "ordered": true,
      "quantity": 2,
      "size": "520x110"
    },
    "emissions_sticker": {
      "ordered": true
    }
  },
  "signer": {
    "email": "signatur@beispiel-mobilitaet.example"
  }
}

Responses

201

Antrag angelegt; die Antwort enthält den gespeicherten Anfangszustand und gegebenenfalls next_action.

401/403

API-Schlüssel, Live-Umgebung oder Scope applications:write ist ungültig.

409

Idempotenzkonflikt oder referenzierte Ressource ist nicht mehr verwendbar.

422

Pflichtfeld, Halterstatus oder Geschäftsvorfall ist fachlich ungültig.

429/503

Rate Limit oder vorübergehend nicht verfügbarer Dienst; Retry-Header beachten.

Response-Body

Content-Type: application/json. Die erfolgreiche Antwort enthält die nachfolgend beschriebenen Felder.

Response-Felder

FeldTypAngabeBeschreibung
idstringImmerÖffentliche Antrags-ID.
objectstringImmerKonstanter Wert vehicle_registration_application.
environmentenumImmertest oder live.
livemodebooleanImmertrue bei Produktivanträgen.
procedureenumImmerAusgeschriebener Vorgang.
procedure_codeenumImmerAB, WG, WZ, NZ, TZ, UG oder HA.
submission_modeenumImmercompany oder third_party.
contract_partner_idstringOptionalBeim Anlegen gebundener Vertragspartner. KOPA-Schlüssel und Stammdaten werden nicht ausgegeben.
holderobjectOptionalGespeicherte Halter-ID, Revision und Verifizierungsstatus. Fehlt bei AB ohne Halterreferenz.
external_referencestringOptionalBeim Anlegen übergebene Referenz.
signature_profilestringOptionalBeim Anlegen gebundenes Signaturprofil. Fehlt ohne Profilangabe.
statusenumImmerAktueller Antragsstatus. Dieses Feld für Programmlogik verwenden.
status_detailsobjectImmerAnzeigetext, Änderungszeitpunkt und gegebenenfalls Fehlerangaben.
next_actionobjectOptionalNächste Clientaktion, beispielsweise Signatur oder Fehlerbehebung.
signatureobjectImmerSignaturpflicht, Status und gegebenenfalls Signatur-URL.
resultsobjectImmerAktuelle Entscheidung und alle bereits verfügbaren KBA-, Kennzeichen- und Behördenwerte. Optionale Unterfelder werden ausgelassen, solange kein Wert vorliegt.
results.decisionenumImmerpending, approved, rejected oder manual_review. Zusammen mit status für Programmlogik verwenden.
results.failure_codestringOptionalStabiler maschinenlesbarer Code eines fehlgeschlagenen Testereignisses. Kein KBA-Quittungscode.
results.kba_application_numberstringOptionalVom KBA vergebene Antragsnummer, sobald sie für den Antrag vorliegt. Nicht mit der öffentlichen id oder external_reference verwechseln. Ein erfolgreicher Testabschluss liefert eine simulierte Nummer mit Präfix KBA-TEST-.
results.assigned_license_platestringOptionalDem Antrag zugeordnetes Kennzeichen, sobald es als Ergebniswert vorliegt.
results.authority_statusarrayOptionalAlle freigebbaren Code-/Message-Paare der aktuellsten Behördenquittung. Das Feld ist kein Quittungsverlauf und kann auch bei status: failed fehlen.
results.authority_status[].codestringBedingtFünfstelliger Quittungscode der Live-Behördenantwort. Führende Nullen bleiben erhalten. Ein erfolgreicher Testabschluss liefert 0000.
results.authority_status[].messagestringBedingtDie diesem Code zugeordnete offizielle Message. Nicht für Programmlogik verwenden.
documentsarrayImmerMetadaten bereitgestellter Dokumente.
orders_urlstringImmerURL der antragsgebundenen Zusatzbestellungen.
feesobjectOptionalAktuelle Gebührenrevision in Euro-Cent.
tariffobjectOptionalTarifinformationen.
timestampsobjectImmerErstellungs-, Änderungs- und Statuszeitpunkt.
warningsarrayOptionalNicht blockierende Hinweise.
201 Response-Beispieljson
{
  "id": "app_live_7f3a92c41b6d8e2054fa1c09",
  "object": "vehicle_registration_application",
  "environment": "live",
  "livemode": true,
  "procedure": "new_registration",
  "procedure_code": "NZ",
  "submission_mode": "third_party",
  "contract_partner_id": "cpt_live_0123456789abcdef01234567",
  "holder": {
    "id": "hld_live_7f3a92c41b6d8e2054fa1c09",
    "revision": 1,
    "verification_status": "verified"
  },
  "external_reference": "fleet-2026-0042",
  "status": "awaiting_signature",
  "status_details": {
    "label": "Freigabe ausstehend",
    "updated_at": "2026-08-23T10:42:18+02:00"
  },
  "next_action": {
    "type": "sign_application",
    "url": "https://digital-zulassen.de/antrag/link/?token=example"
  },
  "signature": {
    "required": true,
    "status": "pending",
    "url": "https://digital-zulassen.de/antrag/link/?token=example"
  },
  "results": {
    "decision": "pending"
  },
  "documents": [],
  "orders_url": "/api/v1/applications/app_live_7f3a92c41b6d8e2054fa1c09/orders",
  "timestamps": {
    "created_at": "2026-08-23T10:42:18+02:00",
    "updated_at": "2026-08-23T10:42:18+02:00",
    "status_updated_at": "2026-08-23T10:42:18+02:00"
  }
}

Vor dem Aufruf

  • Verwenden Sie einen aktiven dz_live_…-Schlüssel mit applications:write.
  • Verwenden Sie pro neuem Antrag einen neuen Idempotency-Key. Wiederholen Sie einen Request nach Timeout oder Verbindungsfehler mit demselben Schlüssel.
  • Prüfen Sie Geschäftsvorfall und Halterkonstellation, bevor Sie personenbezogene Daten übertragen.
  • Senden Sie nur dokumentierte Feldnamen.

Halterreferenz

Verwenden Sie holder_id. Der Antrag speichert den Datenstand des Halters zum Zeitpunkt der Erstellung; spätere Änderungen am Halter wirken nicht auf den Antrag.

Mit holder_id oder inline holder gilt der Antrag als Zulassung für Dritte (submission_mode: third_party). Ohne Halterangabe ist es eine Eigenzulassung (company) — Halterdaten und Bankverbindung kommen dann aus Ihrem Dashboard-Konto und eine Signatur je Antrag entfällt. Bei AB bleibt holder ohne übergebene Halterreferenz leer.

Das inline holder-Objekt bleibt für bestehende Integrationen verfügbar. Neue Integrationen sollten Halter über /api/v1/holders anlegen.

Wann der Halter verifiziert sein muss

Reichen Sie mit Vollmacht auf Digital-Zulassen ein, muss der Halter verifiziert sein. Andernfalls antwortet die API mit holder_verification_required.

Sind Sie selbst beim KBA als Großkunde registriert und reichen über Ihren eigenen Großkundenzugang ein, entfällt die Halterverifizierung: Sie prüfen die Halterdaten in eigener Verantwortung, unverifizierte Personen- und Unternehmenshalter sind zulässig. Diese Freischaltung wird im Dashboard-Konto hinterlegt und lässt sich nicht über ein Request-Feld aktivieren.

Für procedure: AB ist keine Halterreferenz erforderlich. Eine gesendete holder_id oder ein inline holder wird nur als Referenz gespeichert. Ohne Halterangabe bleibt holder leer. AB erfordert weder Halterverifizierung noch QES oder Antragssignatur.

Vertragspartner als Antragsteller

Senden Sie ausschließlich die im Dashboard bereitgestellte contract_partner_id. KOPA-Schlüssel, Name und Anschrift des Vertragspartners werden kontogebunden aufgelöst; sie sind keine API-Felder.

Ohne abweichenden Halter (submission_mode: company) ist der Vertragspartner Antragsteller und Halter. Antragsteller- und Halterkomponente werden fachlich identisch erzeugt; eine Vollmacht entfällt.

Mit holder_id (submission_mode: third_party) bleibt der Vertragspartner Antragsteller. Der referenzierte Halter ist Vollmachtgeber und die Vollmacht bleibt erforderlich.

Zusatzbestellungen

Über additional_services können Kennzeichenschilder und eine Feinstaubplakette mit dem Antrag bestellt werden. Der Bestellstatus steht in eigenen Order-Ressourcen und ist unabhängig vom Antragsstatus.

Response

201 Created bestätigt die Anlage. Die Antwort enthält das Antragsobjekt; der weitere Zustand steht in status.

Bei next_action.type: sign_application muss die URL an die signierende Person übergeben werden. Die URL darf nicht protokolliert oder öffentlich weitergegeben werden. Bei AB gilt signature.required: false und signature.status: not_required; es wird kein Signaturlink erzeugt.

Zum Öffnen eines Treffers Enter drücken.