API-Referenz

Eingaben, Antwortfelder und Fehler der MRZ-Schnittstelle.

POST/v1/mrz

Basis-URL und Schlüssel erhalten Sie nach Freischaltung. Auf dieser Website ist die Kunden-API nicht freigeschaltet.

Zur einfachen Anleitung ↗

Serverseitig authentifizieren.

API-Zugang erhalten Sie auf Anfrage. Verwenden Sie Ihren Schlüssel ausschließlich in Ihrer Serveranwendung, nie im Browser, in mobilen Client-Bundles, URLs oder öffentlichen Repositories.

EigenschaftWert
Base URLMRZ_BASE_URL — nach Freischaltung mitgeteilt
AuthentifizierungAuthorization: Bearer <API_KEY>
MethodePOST
Antwortformatapplication/json
TransportHTTPS

Fehlende oder falsche Zugangsdaten führen zu 401 unauthorized. Schlüssel werden exakt geprüft. Nach Freischaltung erhalten Sie die separate Basis-URL. Konfigurieren Sie MRZ_BASE_URL und den geschützten Schlüssel MRZ_API_KEY serverseitig. Auf dieser Website ist /v1/mrz aktuell nicht freigeschaltet (HTTP 404).

Ein Bild als Base64-JSON senden.

Setzen Sie Content-Type: application/json und senden Sie genau das Feld image_base64. Die Bildbytes werden mit standardkonformem Base64 kodiert.

request.json
{
  "image_base64": "BASE64_BILD"
}

Platzhalter ersetzen. Das JSON enthält genau ein Feld; der Wert ist kein Dateipfad und keine Bild-URL.

RegelAnforderung
Base64Standardalphabet A–Z a–z 0–9 + /, korrektes =-Padding, kanonische Nullbits. Keine Leerzeichen, Zeilenumbrüche, URL-sichere Zeichen oder data:image/…;base64,-Präfixe.
JSON-StrukturEin Objekt mit genau einem Stringfeld. Keine zusätzlichen Felder, doppelten Schlüssel, Arrays oder null-Werte.
BildgrößeMaximal 25 MiB = 26.214.400 dekodierte Bytes. Maximal 34.952.536 Base64-Zeichen.
include_cropQuery-Parameter true (Standard) oder false. Mit false entfällt das Base64-Bild des Ausschnitts; die erkannten Daten bleiben im selben Antwortformat.

Multipart bleibt unterstützt.

Bestehende Integrationen können weiterhin die Bilddatei im Multipart-Feld file senden. Lassen Sie den HTTP-Client den Content-Type einschließlich Boundary erzeugen. Die Erkennungs- und Antwortsemantik ist für beide Eingabearten gleich.

cURL · multipart
curl "${MRZ_BASE_URL}/v1/mrz?include_crop=false" \
  --header "Authorization: Bearer $MRZ_API_KEY" \
  --form 'file=@document.jpg' 

POST /v1/mrz

HTTP 200 liefert ein MRZResponse-Objekt. Jedes Dokument bleibt ein eigenständiger Kandidat.

FeldTypBedeutung
imageobjectBreite, Höhe und coordinate_space: exif_oriented_pixels. Koordinaten beziehen sich auf das nach EXIF ausgerichtete Originalbild.
documentsarrayNull, ein oder mehrere getrennte Dokumentkandidaten. Eine leere Liste ist möglich. Keine Felder verschiedener Kandidaten zusammenführen.
timed_outbooleantrue kennzeichnet ein unvollständiges Ergebnis. Auch bei HTTP 200 zuerst prüfen.
processing_msnumberVerarbeitungsdauer dieses Ergebnisses in Millisekunden; keine zugesagte Latenz.
engine_versionstringVersion des Erkennungskerns. Für Support und Kompatibilitätsdiagnose nutzen.

Ergebniszustände

ZustandBedeutungEmpfohlene Behandlung
recognizedMRZ erkannt.Felder, Prüfziffern, Korrekturen und Hinweise weiter prüfen. Nicht automatisch als Identitätsnachweis behandeln.
uncertainErkennung oder Zuordnung ist unsicher.Manuelle Prüfung oder neues Bild anfordern. Nicht automatisch importieren.
no_mrzKeine verwertbare MRZ für diesen Kandidaten.Vollständige, scharfe MRZ erneut aufnehmen. Vorhandener Ausschnitt ist kein Erkennungserfolg.
documents: []Kein Dokumentkandidat im Ergebnis.Wie fehlende Erkennung behandeln, nicht als erfolgreich leeres Dokument.
timed_out: trueVerarbeitung blieb unvollständig.Keine automatische Übernahme. Zeitbudget, Bildqualität und temporäre Auslastung prüfen.

Vollständiges Antwortbeispiel

Schematisches Beispiel mit öffentlichen ICAO-Utopia-Daten. Bildbytes sind durch BASE64_JPEG ersetzt; Zeit- und Versionswerte illustrieren nur den Datentyp und sind kein Leistungsversprechen.

MRZResponse · HTTP 200
{
  "image": {
    "width": 1200,
    "height": 760,
    "coordinate_space": "exif_oriented_pixels"
  },
  "documents": [
    {
      "status": "recognized",
      "format": "TD3",
      "raw_mrz": [
        "P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<",
        "L898902C36UTO7408122F1204159ZE184226B<<<<<10"
      ],
      "mrz": [
        "P<UTOERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<",
        "L898902C36UTO7408122F1204159ZE184226B<<<<<10"
      ],
      "fields": {
        "document_code": "P<",
        "issuing_state": "UTO",
        "document_number_raw": "L898902C3",
        "nationality": "UTO",
        "date_of_birth": "740812",
        "sex": "F",
        "date_of_expiry": "120415",
        "optional_data": "ZE184226B<<<<<",
        "names_raw": "ERIKSSON<<ANNA<MARIA<<<<<<<<<<<<<<<<<<<",
        "document_number": "L898902C3",
        "document_number_extended": false,
        "surname_raw": "ERIKSSON",
        "given_names_raw": "ANNA<MARIA",
        "surname": "ERIKSSON",
        "given_names": "ANNA MARIA"
      },
      "checks": {
        "date_of_birth": {
          "expected": "2",
          "actual": "2",
          "valid": true,
          "applicable": true
        },
        "date_of_expiry": {
          "expected": "9",
          "actual": "9",
          "valid": true,
          "applicable": true
        },
        "optional_data": {
          "expected": "1",
          "actual": "1",
          "valid": true,
          "applicable": true
        },
        "document_number": {
          "expected": "6",
          "actual": "6",
          "valid": true,
          "applicable": true
        },
        "composite": {
          "expected": "0",
          "actual": "0",
          "valid": true,
          "applicable": true
        }
      },
      "corrections": [],
      "errors": [],
      "mrz_quad": [
        [
          60.63999938964844,
          516.3800048828125
        ],
        [
          1112.280029296875,
          515.219970703125
        ],
        [
          1112.6600341796875,
          601.4600219726562
        ],
        [
          60.790000915527344,
          602.9500122070312
        ]
      ],
      "recognition_score": 0.9833,
      "recognition_method": "neural_mrz_casefold_aspect0.7+neural_mrz_casefold",
      "document_quad": [
        [
          11.5600004196167,
          3.5999999046325684
        ],
        [
          1185.4300537109375,
          9.420000076293945
        ],
        [
          1185.760009765625,
          756.9400024414062
        ],
        [
          9.619999885559082,
          754.3699951171875
        ]
      ],
      "crop_quad": [
        [
          11.559963226318358,
          3.598575592041015
        ],
        [
          1185.4285889897849,
          9.422903061521222
        ],
        [
          1185.759399282995,
          756.9421386655698
        ],
        [
          9.615039825346546,
          754.3733520866444
        ]
      ],
      "document_score": 0.9992,
      "crop_basis": "document",
      "association_basis": null,
      "recognition_retry": null,
      "crop_jpeg_base64": "BASE64_JPEG"
    }
  ],
  "timed_out": false,
  "processing_ms": 125.5,
  "engine_version": "0.1.6"
}

Dokumentobjekt: alle öffentlichen Felder

FeldTypBedeutung
statusstringrecognized · uncertain · no_mrz
formatstring | nullTD1 · TD2 · TD3
raw_mrz / mrzstring[]Ursprüngliche und ausgewählte MRZ-Zeilen. Zeilenlängen und <-Füllzeichen erhalten.
fieldsobjectAusgelesene Daten. Werte sind String, Boolean oder null; nicht jedes Feld ist immer vorhanden.
checksobjectPrüfobjekte für Dokumentnummer, Daten, optionale Daten und Gesamtprüfung. Siehe unten.
correctionsarrayline und index sind nullbasiert; from, to, score dokumentieren Zeichenkorrekturen.
errorsstring[]Hinweise zum Kandidaten. Dies ist kein HTTP-Fehlerfeld. Vor Übernahme auswerten.
document_quad / mrz_quad / crop_quadarray | nullKoordinatenpaare [x,y] der jeweiligen Geometrie. Nicht vorhandene Geometrie ist null.
crop_basisstring | nulldocument, input_border_context, document_mrz_extension
association_basisstring | nullOptionale Zuordnungsevidenz: unique_partial_overlap_surface, unique_continuous_surface_corridor, unique_context_detector_consensus. Kein Nachweis physischer Dokumentidentität.
recognition_score / document_scorenumber | nullInterne Scores. Nicht als kalibrierte Richtigkeitswahrscheinlichkeit oder Prozentwert interpretieren.
recognition_methodstring | nullBezeichnung des verwendeten Erkennungsverfahrens. Diagnosewert, kein festes Enum für Geschäftslogik.
recognition_retryobject | nullBelege einer erneuten Lesung: Methode und vorheriger source_document ohne Bildbytes. Kann weitere Evidenz enthalten.
crop_jpeg_base64string | nullDokumentausschnitt als reine Base64-JPEG-Bytes. Kann fehlen oder null sein, insbesondere bei include_crop=false. Kein separat ausgeschnittenes Porträt.

Die ausgelesenen Felder

FeldBedeutung
surname, given_namesNormalisierte Namen; ursprüngliche Lesung unter surname_raw, given_names_raw, names_raw.
document_numberVollständige Dokumentnummer; document_number_raw enthält das ursprüngliche Hauptfeld, document_number_extended markiert Fortsetzungen.
document_codeOriginaler zweistelliger Code, z. B. P<.
issuing_state, nationalityMRZ-Codes einschließlich vorhandener Füllzeichen. Unbekannte Codes bleiben erhalten und werden gekennzeichnet.
date_of_birth, date_of_expiryRohe MRZ-Daten im Format JJMMTT; unvollständige Geburtsdaten können < enthalten. Keine Jahrhundertbestimmung durch diesen Endpunkt.
sexMRZ-Wert M, F oder <.
optional_data, optional_data_2, optional_data_remainingFormatabhängige optionale Rohdaten. Daraus wird keine persönliche Identifikationsnummer geraten.

Prüfziffern richtig interpretieren

checks.document_number
{"expected":"6","actual":"6","valid":true,"applicable":true}

expected ist die berechnete, actual die gelesene Prüfziffer; beide dürfen null sein. Nur applicable=true und valid=true bedeuten eine bestandene anwendbare Prüfung. Fehlende oder nicht anwendbare Prüfungen gelten nicht automatisch als bestanden. Prüfungsnamen: document_number, date_of_birth, date_of_expiry, optional_data und composite.

Hinweise und mehrere Dokumente behandeln.

Jeder Kandidat enthält seine Diagnosen in errors. Prüfen Sie zusätzlich checks, corrections und gegebenenfalls recognition_retry. Ein Status recognized ersetzt diese Prüfung nicht.

BelegBedeutung & Umgang
Prüfziffernchecksum_<name> in errors kennzeichnet eine fehlgeschlagene Prüfziffer. Die konkreten Werte stehen in checks.
Korrekturencorrections und Abweichungen zwischen raw_mrz und mrz sichtbar prüfen. Nicht alle Felder sind durch Prüfziffern abgesichert.
Erneute Lesungrecognition_retry beschreibt eine erneute Lesung desselben verlustfreien Ausschnitts. source_document darin hält das vorherige Ergebnis ohne Bildbytes fest.
Dokumentzuordnungassociation_basis und die Koordinaten beschreiben die räumliche Zuordnung von Dokument und MRZ. Sie sind kein Nachweis der Identität einer Person oder der Echtheit eines Dokuments.

Dokumentdiagnosen

Der aktuelle Kern kann folgende Diagnosegruppen ausgeben. Zusätzlich stehen fehlgeschlagene Prüfziffern als checksum_<name> in errors. Erhalten Sie unbekannte zukünftige Codes; behandeln Sie sie als prüfbedürftig statt als Erfolg.

Syntax und Feldinhalt

invalid_line_structureinvalid_charactersinvalid_document_codeinvalid_issuing_stateinvalid_nationalityinvalid_document_numberinvalid_document_number_rawinvalid_extended_document_numberinvalid_date_of_birthinvalid_date_of_expiryinvalid_sexinvalid_names_rawinvalid_name_paddinginvalid_optional_datainvalid_optional_data_2

Unbekannte Länder-/Staatencodes

unknown_issuing_stateunknown_nationality

Korrektur und Zeichenevidenz

invalid_alternativescorrection_limit_exceededambiguous_correctionslow_recognition_scorelow_character_evidenceconflicting_raw_character_evidenceunsupported_character_correction

Bildlage und Zeitbudget

mrz_outside_imageprocessing_budget_exhausted

Mehrere Kandidaten bleiben getrennt.

documents enthält alle Kandidaten, auch solche mit uncertain oder no_mrz. Die API wählt daraus kein einziges flaches Ergebnis und vermischt keine Felder. Wenn Ihre Anwendung genau ein Dokument benötigt, prüfen Sie die Anzahl und die Kandidaten ausdrücklich. Bei Mehrdeutigkeit ein separates Dokumentbild anfordern oder eine manuelle Auswahl vorsehen. documents: [] bedeutet, dass kein Kandidat gefunden wurde.

HTTP-Fehler und konkrete nächste Schritte.

Anfrage- und Dienstfehler verwenden HTTP 4xx/5xx. Die Tabelle beschreibt die aktuellen Engine-Mappings einschließlich gemeinsamer Decoderdiagnosen. Nicht jeder Diagnosecode ist mit jedem Format erreichbar.

HTTPFehler / AntwortWas Ihre Anwendung tun sollte
400invalid_content_lengthContent-Length ist ungültig. Header vom HTTP-Client berechnen lassen.
422invalid_requestJSON-Struktur ungültig: image_base64 fehlt, ist kein String oder es gibt zusätzliche Felder. Ein Objekt mit genau diesem Stringfeld senden.
401unauthorizedBearer-Token fehlt oder stimmt nicht. Schlüssel prüfen; unverändert nicht wiederholen.
405detailFalsche Methode. POST verwenden.
408upload_timeoutUpload hat das Zeitfenster überschritten. Verbindung prüfen, kleinere Datei senden.
413upload_too_largeTransport-, Base64- oder dekodiertes Dateilimit überschritten. Bild verkleinern; Base64 vergrößert die Datenmenge.
413
image_limitpixel_limitupload_limitpdf_page_limit
Bild-, Pixel- oder Decoderlimit. Bildabmessungen reduzieren; keine PDF an diesen Einbild-Endpunkt senden.
422invalid_jsonJSON beschädigt, Schlüssel doppelt oder unzulässige JSON-Konstante. Gültiges UTF-8-JSON erzeugen.
422invalid_base64Base64 leer, falsch oder nicht kanonisch. Originalbytes ohne Zeilenumbrüche standardkonform neu kodieren.
422
invalid_imageunsupported_formatempty_fileimage_too_small
Kein nutzbares Bild. Unterstützte Datei mit lesbarer MRZ übermitteln.
422
invalid_heicheic_decode_failedinvalid_webpunsupported_rawinvalid_rawraw_decode_failed
Formatabhängiger Decoderfehler. Datei prüfen oder verlustarm in JPEG/PNG umwandeln.
422
pdf_requires_batchpdf_password_requiredinvalid_pdfinvalid_pagepdf_emptypdf_invalid_geometrypdf_decode_failed
PDF-/Seiten-Diagnosen des gemeinsamen Decoders. Die Schnittstelle akzeptiert ein einzelnes Bild; eine geeignete Seite als Bild senden. Die interne Batch-Schnittstelle ist nicht öffentlich freigeschaltet.
422detail: […]FastAPI-Validierung bei /v1/mrz, z. B. fehlendes Multipart-Feld oder ungültiger Query-Parameter. Felder/Parameter korrigieren.
500processing_failedInterner Verarbeitungs- oder Antwortfehler. Höchstens begrenzt erneut versuchen; bei Wiederholung Support kontaktieren.
503service_busyBegrenzte Verarbeitungskapazität belegt. Retry-After: 2 beachten, Parallelität reduzieren.
504processing_timeoutVerarbeitung abgebrochen. Fehlerantwort enthält Timeout-Belege; nach kurzer Pause kleineres/geeigneteres Bild versuchen.
4xx / 5xxrequest_failed / detailAllgemeiner HTTP- oder Proxyfehler. HTTP-Status und Content-Type auswerten; Fehlerantworten entsprechen nicht dem erfolgreichen MRZResponse-Modell.

Fehlerformate unterscheiden

/v1/mrz · HTTP 422
{"error":"invalid_base64"}
/v1/mrz · HTTP 504
{"error":"processing_timeout","timed_out":true,"documents":[]}

Proxyfehler können ein einfaches Objekt wie {"error":"request_failed"} liefern. Eine unbekannte URL kann HTTP 404 mit Text statt JSON zurückgeben. Prüfen Sie daher immer Status und Content-Type, bevor Sie das Erfolgsmodell lesen. Neue Diagnosecodes defensiv behandeln.

Ein verlässlicher Ablauf für Ihre Anwendung.

  1. HTTP-Antwort prüfen

    4xx: Eingabe oder Zugang korrigieren. 503: Retry-After beachten. 500/502/504: begrenzt mit Pause wiederholen. Netzwerkfehler und nicht-JSON-Antworten separat abfangen.

  2. Verarbeitungsergebnis prüfen

    timed_out=false, gewünschter Kandidat vorhanden und documents[].status=recognized. Anzahl und Zuordnung der Kandidaten ausdrücklich prüfen. Teilfelder in negativen Ergebnissen nicht übernehmen.

  3. Hinweise und Daten validieren

    Prüfziffern, Korrekturen, Rohdaten und Zuordnungsbelege bewerten. Pflichtfelder, Datumsannahmen, Alter und Gültigkeit nach Ihren Geschäftsregeln prüfen. Fehlende Felder nicht ergänzen oder erraten.

  4. Übernehmen oder prüfen lassen

    Nur nach Ihren Annahmekriterien übernehmen. Unsichere, mehrdeutige oder unvollständige Ergebnisse an einen sichtbaren Prüfprozess geben. Dokumente nie anhand gültiger Prüfziffern als echt erklären.

Dekodieren Sie Bildausgaben als Base64 und prüfen Sie JPEG-Format und Größe vor einer Weiterverarbeitung. Eine Data-URL für die Anzeige erzeugen Sie erst in Ihrer eigenen Oberfläche. Protokollieren Sie technische Status-/Fehlercodes statt Dokumentbildern, vollständigen Antworten oder API-Schlüsseln.

Formate und Grenzen

BereichVerhalten
Enterprise API25 MiB dekodierte Bildbytes; 40 Millionen Pixel. Ein Bild pro Request.
EingabeformateJPEG, PNG, WebP, HEIC und unterstützte Kamera-RAW-Dateien. RAW-Unterstützung hängt vom konkreten Format/Kameramodell ab.
PDFNicht an /v1/mrz senden. Eine Dokumentseite vorher als Bild bereitstellen.
MRZ-FormateTD1: 3 × 30 · TD2: 2 × 36 · TD3: 2 × 44
Vorbereitete Enterprise-API: Antwort und AufbewahrungSynchrones JSON-Ergebnis. Die aktuelle Basis-Erkennung verarbeitet Bilder im Arbeitsspeicher und speichert Dokumente oder Ergebnisse nicht dauerhaft. Das in kostenpflichtigen Angeboten enthaltene geschützte Kundenarchiv mit 30 Tagen Aufbewahrung wird individuell eingerichtet. Die kostenlose Demo stellt keine Downloadlinks zu einem Kundenarchiv bereit. Speichern Sie eigene Downloads nur entsprechend Ihrem vorgesehenen Prozess.

KI-Bildaufbereitung ist eine gesonderte Erweiterung auf Anfrage. Diese Schnittstelle bietet keinen Standardparameter, der „Enhance Output Image with AI“ aktiviert.

Öffentliche Website-Demo

Einwilligung und Trainingsspeicherung in der Demo

Datei- und Beispielauswahl, Ablegen oder Kameraaktivierung starten die Übertragung nach dem sichtbaren Speicherhinweis. Die Oberfläche sendet X-Training-Consent: training-v3; training-v1 und training-v2 bleiben für ältere Clients akzeptiert. Der Header kennzeichnet die Hinweisversion.

Originalbilder und vollständige Ergebnisse werden verschlüsselt für 30 Tage ab Upload zu Trainingszwecken und zur Qualitätsverbesserung gespeichert und anschließend automatisch gelöscht. Eine frühere Löschung können Sie mit Ihrer Upload-ID unter info@oasisscan.de anfordern. Diese Speicherung betrifft nur die öffentliche Demo.

X-Training-Upload-ID enthält die ID einer angenommenen Speicherung. Auch bei einem Erkennungsfehler kann der Upload bereits gespeichert sein; wiederholen Sie ihn dann nicht automatisch. Abbrechen oder Zurücksetzen löscht gespeicherte Daten nicht.

Demo-spezifisch: 422 training_consent_required bedeutet, dass der Hinweismarker fehlt oder nicht unterstützt wird; 503 training_storage_unavailable bedeutet, dass die sichere Speicherung momentan nicht möglich ist. Es wird dann nicht stillschweigend ohne Speicherung verarbeitet. 503 service_busy ohne Upload-ID kann nach Retry-After begrenzt wiederholt werden. Der Browser-Batch nutzt bis zu vier parallele Einbild-Requests und zeigt Status und Upload-ID pro Datei. Details: Datenschutz.