Dokumentation

API-Referenz Test

POST/api/v1/test/applications

Testantrag anlegen

Der Request entspricht dem produktiven Anlageformat. Weitere Zustände werden über Testereignisse gesetzt.

Beschreibung

Legt einen gespeicherten Testantrag ohne KBA-Übergabe an.

Parameter

Idempotency-KeyheaderPflicht

Eindeutiger Schlüssel für die Testanlage.

Beispiel: test_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_test_1a2b3c4d5e6f708192a3b4c5",
  "external_reference": "test-ci-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-test@beispiel-mobilitaet.example"
  }
}

Responses

201

Testantrag gespeichert; keine KBA-Übergabe.

401/403

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

409

Idempotenzkonflikt.

422

Requestdaten oder Testressourcen sind ungültig.

429

Rate Limit oder tägliches Testanlagen-Budget erreicht.

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_test_1a2b3c4d5e6f708192a3b4c5",
  "object": "vehicle_registration_application",
  "environment": "test",
  "livemode": false,
  "procedure": "new_registration",
  "procedure_code": "NZ",
  "submission_mode": "third_party",
  "holder": {
    "id": "hld_test_1a2b3c4d5e6f708192a3b4c5",
    "revision": 1,
    "verification_status": "verified"
  },
  "external_reference": "test-ci-1042",
  "status": "awaiting_signature",
  "status_details": {
    "label": "Freigabe ausstehend",
    "updated_at": "2026-08-23T10:42:18+02:00"
  },
  "next_action": {
    "type": "sign_application",
    "url": "/api/v1/test/signatures/0123456789abcdef0123456789abcdef0123456789abcdef"
  },
  "signature": {
    "required": true,
    "status": "pending",
    "url": "/api/v1/test/signatures/0123456789abcdef0123456789abcdef0123456789abcdef"
  },
  "results": {
    "decision": "pending"
  },
  "documents": [],
  "orders_url": "/api/v1/applications/app_test_1a2b3c4d5e6f708192a3b4c5/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"
  }
}

Testisolierung

Testanträge tragen environment: test und livemode: false. Der KBA-Versand ist unabhängig von UI oder Requestdaten serverseitig ausgeschlossen.

Ein dz_live_…-Schlüssel wird an diesem Endpunkt abgewiesen. Umgekehrt darf ein dz_test_…-Schlüssel keinen produktiven Antrag anlegen. Der Testendpunkt benötigt applications:write.

Teststatus setzen

TestereignisZweck
signature.completedDen Signaturschritt abschließen.
processing.startedDen Status auf processing setzen.
application.completedErfolgreichen Abschluss mit Testdokument und Testgebühr erzeugen.
application.failedEinen fehlgeschlagenen Antrag simulieren.

Tagesbudget und Aufbewahrung

Neue Testanlagen teilen sich pro Konto ein tägliches Budget, standardmäßig 50. Die Response-Header Test-Create-Limit, Test-Create-Remaining und Test-Create-Reset machen das aktuelle Budget sichtbar. Ein idempotent wiederholter Request verbraucht keinen weiteren Platz.

Testanträge und ihre antragsgebundenen Artefakte werden standardmäßig nach 30 Tagen bereinigt. Je Konfiguration kann die Frist zwischen 7 und 365 Tagen liegen. Diese Frist ist keine pauschale Löschzusage für eigenständige Test-Halter, Kennzeichenchecks oder Reservierungen. Verwenden Sie Testdaten deshalb nicht als dauerhaftes Archiv und sichern Sie benötigte Prüfergebnisse rechtzeitig in Ihrer eigenen Testumgebung.

Zum Öffnen eines Treffers Enter drücken.