ZEVRA › API-Referenz · Stand:
OpenAPI 3.1 · 11 Endpunkte

Kennzeichen-Check API-Referenz

Die Kennzeichen-Check API-Referenz listet jeden Endpunkt mit Parametern, Antwortcodes und Feldern. Bei Zevra entsteht diese Seite direkt aus der maschinenlesbaren Beschreibung der Schnittstelle, deshalb weicht sie nie von der laufenden API ab.

Kennzeichen-Check · Kennzeichen-Check einbinden · Kennzeichen-Check Abdeckung

Basisadresse und Schlüssel

PunktWert
Basisadressehttps://app.zevra24.de/api/kc/v1
Schlüssel im HeaderX-WKZ-Key · Authorization: Bearer
Limit je Schlüssel120 Anfragen pro Minute
Sandbox-SchlüsselBeginnt mit wkz_sbx_: feste Szenarien, keine Behörde, keine Berechnung

Preis laut Beschreibung: Wunschkennzeichen live prüfen und reservieren. Grundgebühr 50,00 € im Monat, 0,05 € je berechneter Prüfung, 2,00 € je erfolgreicher Reservierung (netto, zuzüglich Behördengebühren). Limit: 120 Anfragen pro Minute je Schlüssel. Schlüssel mit wkz_sbx_ sind Sandbox-Schlüssel: feste Szenarien, keine Behörde, keine Berechnung.

Endpunkte

Mit Schlüssel heißt: Header X-WKZ-Key oder Authorization: Bearer. Jede Antwort mit Schlüssel trägt die Limit-Header.

POSTVerfügbarkeit aus dem domaingebundenen Widget prüfen

POST https://app.zevra24.de/api/kc/v1/widget/search

ohne Schlüssel

Parameter

Originheader · Pflichtfeld
–

Inhalt der Anfrage

application/x-www-form-urlencoded ·

site_keystring · Pflichtfeld
beginnt mit wkz_site_
codestring · Pflichtfeld
Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersstring · Pflichtfeld
1 bis 2 Buchstaben
numbersstring · Pflichtfeld
1 bis 4 Ziffern, ohne führende Null
plzstring
genau 5 Stellen, nur Ziffern
office_idstring
höchstens 40 Zeichen

Antworten

CodeBedeutungDatenmodell
200OKSearchResult
400Ungültige AnfrageError
401Site-Schlüssel oder Domain ungültigError
429Limit erreichtError
503Dienst nicht verfügbarError

POSTÖffentliche Zevra-Testabfrage, 10 Versuche pro Besucher und Tag

POST https://app.zevra24.de/api/kc/v1/public/search

ohne Schlüssel

Parameter

Originheader · Pflichtfeld
–

Inhalt der Anfrage

application/x-www-form-urlencoded ·

codestring · Pflichtfeld
Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersstring · Pflichtfeld
1 bis 2 Buchstaben
numbersstring · Pflichtfeld
1 bis 4 Ziffern, ohne führende Null
plzstring
genau 5 Stellen, nur Ziffern
office_idstring
höchstens 40 Zeichen

Antworten

CodeBedeutungDatenmodell
200OKSearchResult
400Ungültige AnfrageError
401Anfragequelle ungültigError
429Tageslimit erreichtError
503Dienst nicht verfügbarError

POSTBis zu 50 Kombinationen in einem Aufruf prüfen

POST https://app.zevra24.de/api/kc/v1/search/batch

mit Schlüssel

Inhalt der Anfrage

application/json ·

itemsarray <Plate> · Pflichtfeld
mindestens 1 Eintrag · höchstens 50 Einträge

Antworten

CodeBedeutungDatenmodell
200OKBatchResult
400Ungültige AnfrageError
401Schlüssel fehlt oder ist ungültigError
403Zugang beendet (revoked)Error
429Monatslimit erreicht oder zu viele AnfragenError
503Dienst vorübergehend nicht verfügbarError

POSTReservierung anlegen (nur mit aktivem Abonnement oder Sandbox-Schlüssel)

POST https://app.zevra24.de/api/kc/v1/reservations

mit Schlüssel

Parameter

Idempotency-Keyheader · Pflichtfeld
mindestens 8 Zeichen · höchstens 80 Zeichen

Inhalt der Anfrage

application/json · ReservationRequest

Antworten

CodeBedeutungDatenmodell
200Bereits angelegt (gleicher Idempotency-Key)Reservation
202AngenommenReservation
400Ungültige AnfrageError
401Schlüssel fehlt oder ist ungültigError
403Abonnement erforderlichError
409Idempotency-Key mit anderem Inhalt verwendetError
429Monatslimit erreicht oder zu viele AnfragenError
503Dienst vorübergehend nicht verfügbarError

GETStatus einer Reservierung

GET https://app.zevra24.de/api/kc/v1/reservations/{rid}

mit Schlüssel

Parameter

ridpath · Pflichtfeld
–

Antworten

CodeBedeutungDatenmodell
200OKReservation
401Schlüssel fehlt oder ist ungültigError
403Zugang beendet (revoked)Error
404Nicht gefundenError
429Monatslimit erreicht oder zu viele AnfragenError
503Dienst vorübergehend nicht verfügbarError

GETVerbrauch und Kosten des laufenden Zeitraums

GET https://app.zevra24.de/api/kc/v1/usage

mit Schlüssel

Antworten

CodeBedeutungDatenmodell
200OKUsage
401Schlüssel fehlt oder ist ungültigError
403Zugang beendet (revoked)Error
429Monatslimit erreicht oder zu viele AnfragenError
503Dienst vorübergehend nicht verfügbarError

GETZulassungsstellen und Zustand, optional nach Kürzel gefiltert (ohne Schlüssel)

GET https://app.zevra24.de/api/kc/v1/offices

ohne Schlüssel

Parameter

codequery
–

Antworten

CodeBedeutungDatenmodell
200OKOffices

GETFeste Szenarien der Sandbox (ohne Schlüssel)

GET https://app.zevra24.de/api/kc/v1/sandbox/scenarios

ohne Schlüssel

Antworten

CodeBedeutungDatenmodell
200OK–

GETDiese Beschreibung

GET https://app.zevra24.de/api/kc/v1/openapi.json

ohne Schlüssel

Antworten

CodeBedeutungDatenmodell
200OK–

GETDiese Beschreibung als Postman-Sammlung (ohne Schlüssel)

GET https://app.zevra24.de/api/kc/v1/postman.json

ohne Schlüssel

Antworten

CodeBedeutungDatenmodell
200OK–

Webhook

reservation.updated

Statuswechsel einer Reservierung, signiert mit HMAC-SHA256 (X-Zevra-Signature über »Zeitstempel.Inhalt«)

Parameter

X-Zevra-Eventheader · Pflichtfeld
–
X-Zevra-Timestampheader · Pflichtfeld
–
X-Zevra-Signatureheader · Pflichtfeld
–

Inhalt der Anfrage

application/json ·

idstring
–
typestring
Werte: reservation.updated
createdstring
–
dataReservation
–

Antworten

CodeBedeutungDatenmodell
200Jede 2xx-Antwort gilt als zugestellt; sonst Wiederholung nach 1, 5, 30, 120, 720 Minuten–

Limit-Header

X-RateLimit-Limitinteger
Anfragen pro Minute je Schlüssel
X-RateLimit-Remaininginteger
Verbleibende Anfragen in der laufenden Minute
X-RateLimit-Resetinteger
Sekunden bis zur nächsten Minute
Retry-Afterinteger
Nur bei zu vielen Anfragen pro Minute: Sekunden bis zum nächsten Versuch

Datenmodelle

Beschreibungen der Felder stammen unverändert aus der OpenAPI-Datei.

Error

errorstring · Pflichtfeld
Werte: backend · bad_request · batch_size · holder · idem_conflict · idem_key · letters · no_backend · not_found · numbers · prefix · quota_exhausted · rate_limited · revoked · subscription_required · unauthorized
messagestring · Pflichtfeld
–
message_enstring
Dieselbe Meldung auf Englisch
quotaobject
Nur bei quota_exhausted: Stand des Kontingents

Plate

prefixstring · Pflichtfeld
Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersstring · Pflichtfeld
1 bis 2 Buchstaben
numbersstring · Pflichtfeld
1 bis 4 Ziffern, ohne führende Null

SearchResult

platestring | null
–
availableboolean | null
true = frei · false = vergeben · null = keine Aussage (nie als vergeben anzeigen)
reasonstring
Ohne Aussage (available = null): office_not_queryable/gate = Stelle nicht online prüfbar · check_failed/captcha_expired = Stelle antwortet gerade nicht, später erneut · unknown_prefix/unknown_office = Kürzel unbekannt · ambiguous_prefix = mehrere Stellen, plz oder office_id angeben. quota_exhausted · revoked · rate_limited · no_backend nur in /search/batch: ab diesem Eintrag wurde nicht mehr geprüft Werte: checked · checked_via_twin · checked_via_warm_session · checked_via_captcha · check_failed · captcha_expired · gate · office_not_queryable · ambiguous_prefix · unknown_prefix · unknown_office · invalid · quota_exhausted · revoked · rate_limited · no_backend
sandboxboolean
–
known_officeboolean
Das Kürzel gehört zu einer bekannten Zulassungsstelle
checkableboolean
Die Zulassungsstelle ist live abfragbar
latency_msinteger
Antwortzeit der Behörde in Millisekunden
plate_invalidstring
Gesetzt, wenn die Kombination formal unzulässig ist (keine Prüfung gezählt) Werte: prefix · letters · numbers · office
remaining_todayinteger
Nur /public/search: verbleibende Testabfragen heute
suggestionsarray <object>
Nur /public/search bei vergebenem Kennzeichen: freie Alternativen
suggestions_limitedboolean
Nur /public/search: die Behörde nannte weniger Alternativen als angefragt
suggestions_unavailableboolean
Nur /public/search: Alternativen konnten gerade nicht abgefragt werden

Holder

namestring · Pflichtfeld
–
vornamestring
–
geburtsdatumstring
–
strassestring
–
plzstring · Pflichtfeld
–
ortstring · Pflichtfeld
–

Reservation

idstring
–
statusstring
Werte: queued · processing · reserved · failed
environmentstring
Werte: live · sandbox
platestring
–
customerReferencestring | null
–
reasonstring | null
–
reservationCodestring | null
Code der Behörde für die Zulassung, nur bei status=reserved
authorityFeeAdvancedCentsinteger
Von Zevra verauslagte Behördengebühr in Cent (durchlaufender Posten)
createdAtstring
–
updatedAtstring
–

BatchResult

countinteger
–
resultsarray <SearchResult>
–

ReservationRequest

prefixstring · Pflichtfeld
Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersstring · Pflichtfeld
1 bis 2 Buchstaben
numbersstring · Pflichtfeld
1 bis 4 Ziffern, ohne führende Null
halterHolder · Pflichtfeld
–
customerReferencestring
höchstens 80 Zeichen

Usage

environmentstring
–
statusstring
–
checksinteger
–
limitinteger
–
reservationsinteger
–
usageCentsinteger
–
authorityFeesAdvancedCentsinteger
–
periodEndstring | null
–

Offices

countinteger
–
officesarray <object>
–

Dateien zum Herunterladen

Fragen zur API-Referenz

Ist diese Referenz immer aktuell?
Ja. Die Seite wird aus derselben OpenAPI-Datei erzeugt, die die Schnittstelle unter /api/kc/v1/openapi.json ausliefert. Ein Test vergleicht beide bei jeder Änderung.
Wie teste ich ohne Kosten?
Mit einem Sandbox-Schlüssel (wkz_sbx_). Er liefert feste Szenarien, fragt keine Behörde ab und wird nicht berechnet.
Was passiert bei mehr als 120 Anfragen pro Minute?
Die Schnittstelle antwortet mit 429 und dem Header Retry-After. Er nennt die Sekunden bis zum nächsten Versuch.
Welche Antwort wird berechnet?
Nur eine Prüfung mit Aussage der Behörde (frei oder vergeben). Antworten ohne Aussage und Sandbox-Antworten kosten nichts.

Schlüssel holen und loslegen