Kennzeichen-Check API reference
The Kennzeichen-Check API reference lists every endpoint with its parameters, response codes and fields. With Zevra this page is generated straight from the machine-readable description of the API, so it never drifts from the running API.
Kennzeichen-Check · Integrate the Kennzeichen-Check · Kennzeichen-Check coverage
Base address and key
| Item | Value |
|---|---|
| Base address | https://app.zevra24.de/api/kc/v1 |
| Key in the header | X-WKZ-Key · Authorization: Bearer |
| Limit per key | 120 requests per minute |
| Sandbox key | Starts with wkz_sbx_: fixed scenarios, no authority, no charge |
Price as stated in the description: 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.
Endpoints
With key means: header X-WKZ-Key or Authorization: Bearer. Every answer to a keyed call carries the limit headers.
- GETVerfügbarkeit einer Kombination prüfen (with key)
- POSTVerfügbarkeit aus dem domaingebundenen Widget prüfen (without key)
- POSTÖffentliche Zevra-Testabfrage, 10 Versuche pro Besucher und Tag (without key)
- POSTBis zu 50 Kombinationen in einem Aufruf prüfen (with key)
- POSTReservierung anlegen (nur mit aktivem Abonnement oder Sandbox-Schlüssel) (with key)
- GETStatus einer Reservierung (with key)
- GETVerbrauch und Kosten des laufenden Zeitraums (with key)
- GETZulassungsstellen und Zustand, optional nach Kürzel gefiltert (ohne Schlüssel) (without key)
- GETFeste Szenarien der Sandbox (ohne Schlüssel) (without key)
- GETDiese Beschreibung (without key)
- GETDiese Beschreibung als Postman-Sammlung (ohne Schlüssel) (without key)
GETVerfügbarkeit einer Kombination prüfen
GET https://app.zevra24.de/api/kc/v1/search
with key
Parameters
prefixquery · required- Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersquery · required- 1 bis 2 Buchstaben
numbersquery · required- 1 bis 4 Ziffern, ohne führende Null
plzquery- Postleitzahl, wenn das Kürzel zu mehreren Zulassungsstellen gehört (ambiguous_prefix) · exactly 5 digits
office_idquery- Kennung der Zulassungsstelle aus der Antwort ambiguous_prefix
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | OK | SearchResult |
401 | Schlüssel fehlt oder ist ungültig | Error |
403 | Zugang beendet (revoked) | Error |
429 | Monatslimit erreicht oder zu viele Anfragen | Error |
503 | Dienst vorübergehend nicht verfügbar | Error |
POSTVerfügbarkeit aus dem domaingebundenen Widget prüfen
POST https://app.zevra24.de/api/kc/v1/widget/search
without key
Parameters
Originheader · required- –
Request body
application/x-www-form-urlencoded ·
site_keystring· required- starts with
wkz_site_ codestring· required- Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersstring· required- 1 bis 2 Buchstaben
numbersstring· required- 1 bis 4 Ziffern, ohne führende Null
plzstring- exactly 5 digits
office_idstring- at most 40 characters
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | OK | SearchResult |
400 | Ungültige Anfrage | Error |
401 | Site-Schlüssel oder Domain ungültig | Error |
429 | Limit erreicht | Error |
503 | Dienst nicht verfügbar | Error |
POSTÖffentliche Zevra-Testabfrage, 10 Versuche pro Besucher und Tag
POST https://app.zevra24.de/api/kc/v1/public/search
without key
Parameters
Originheader · required- –
Request body
application/x-www-form-urlencoded ·
codestring· required- Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersstring· required- 1 bis 2 Buchstaben
numbersstring· required- 1 bis 4 Ziffern, ohne führende Null
plzstring- exactly 5 digits
office_idstring- at most 40 characters
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | OK | SearchResult |
400 | Ungültige Anfrage | Error |
401 | Anfragequelle ungültig | Error |
429 | Tageslimit erreicht | Error |
503 | Dienst nicht verfügbar | Error |
POSTBis zu 50 Kombinationen in einem Aufruf prüfen
POST https://app.zevra24.de/api/kc/v1/search/batch
with key
Request body
application/json ·
itemsarray <Plate> · required- at least 1 item · at most 50 items
Responses
POSTReservierung anlegen (nur mit aktivem Abonnement oder Sandbox-Schlüssel)
POST https://app.zevra24.de/api/kc/v1/reservations
with key
Parameters
Idempotency-Keyheader · required- at least 8 characters · at most 80 characters
Request body
application/json · ReservationRequest
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | Bereits angelegt (gleicher Idempotency-Key) | Reservation |
202 | Angenommen | Reservation |
400 | Ungültige Anfrage | Error |
401 | Schlüssel fehlt oder ist ungültig | Error |
403 | Abonnement erforderlich | Error |
409 | Idempotency-Key mit anderem Inhalt verwendet | Error |
429 | Monatslimit erreicht oder zu viele Anfragen | Error |
503 | Dienst vorübergehend nicht verfügbar | Error |
GETStatus einer Reservierung
GET https://app.zevra24.de/api/kc/v1/reservations/{rid}with key
Parameters
ridpath · required- –
Responses
GETVerbrauch und Kosten des laufenden Zeitraums
GET https://app.zevra24.de/api/kc/v1/usage
with key
Responses
GETZulassungsstellen und Zustand, optional nach Kürzel gefiltert (ohne Schlüssel)
GET https://app.zevra24.de/api/kc/v1/offices
without key
Parameters
codequery- –
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | OK | Offices |
GETFeste Szenarien der Sandbox (ohne Schlüssel)
GET https://app.zevra24.de/api/kc/v1/sandbox/scenarios
without key
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | OK | – |
GETDiese Beschreibung
GET https://app.zevra24.de/api/kc/v1/openapi.json
without key
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | OK | – |
GETDiese Beschreibung als Postman-Sammlung (ohne Schlüssel)
GET https://app.zevra24.de/api/kc/v1/postman.json
without key
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | OK | – |
Webhook
reservation.updated
Statuswechsel einer Reservierung, signiert mit HMAC-SHA256 (X-Zevra-Signature über »Zeitstempel.Inhalt«)
Parameters
X-Zevra-Eventheader · required- –
X-Zevra-Timestampheader · required- –
X-Zevra-Signatureheader · required- –
Request body
application/json ·
idstring- –
typestring- Values:
reservation.updated createdstring- –
dataReservation- –
Responses
| Code | Meaning | Data model |
|---|---|---|
200 | Jede 2xx-Antwort gilt als zugestellt; sonst Wiederholung nach 1, 5, 30, 120, 720 Minuten | – |
Limit headers
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
Data models
Field descriptions are taken unchanged from the OpenAPI file and are in German.
Error
errorstring· required- Values:
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· required- –
message_enstring- Dieselbe Meldung auf Englisch
quotaobject- Nur bei quota_exhausted: Stand des Kontingents
Plate
prefixstring· required- Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersstring· required- 1 bis 2 Buchstaben
numbersstring· required- 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 Values:
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) Values:
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· required- –
vornamestring- –
geburtsdatumstring- –
strassestring- –
plzstring· required- –
ortstring· required- –
Reservation
idstring- –
statusstring- Values:
queued·processing·reserved·failed environmentstring- Values:
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· required- Unterscheidungszeichen, 1 bis 3 Buchstaben
lettersstring· required- 1 bis 2 Buchstaben
numbersstring· required- 1 bis 4 Ziffern, ohne führende Null
halterHolder · required- –
customerReferencestring- at most 80 characters
Usage
environmentstring- –
statusstring- –
checksinteger- –
limitinteger- –
reservationsinteger- –
usageCentsinteger- –
authorityFeesAdvancedCentsinteger- –
periodEndstring | null- –
Offices
countinteger- –
officesarray <object>- –
Files to download
Questions about the API reference
Is this reference always up to date?
How do I test without cost?
What happens above 120 requests per minute?
Which answer is charged?
More about the Kennzeichen-Check
Kennzeichen-Check · Integrate the Kennzeichen-Check · Kennzeichen-Check coverage · Kennzeichen-Check for shops · Kennzeichen-Check for registration services · Kennzeichen-Check status
Registration offices with live checks, for example: Berlin · Hamburg · Frankfurt am Main · Stuttgart · Kreis Recklinghausen · Düsseldorf · Dortmund