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.
| Eigenschaft | Wert |
|---|---|
| Base URL | MRZ_BASE_URL — nach Freischaltung mitgeteilt |
| Authentifizierung | Authorization: Bearer <API_KEY> |
| Methode | POST |
| Antwortformat | application/json |
| Transport | HTTPS |
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.
{
"image_base64": "BASE64_BILD"
}Platzhalter ersetzen. Das JSON enthält genau ein Feld; der Wert ist kein Dateipfad und keine Bild-URL.
| Regel | Anforderung |
|---|---|
| Base64 | Standardalphabet A–Z a–z 0–9 + /, korrektes =-Padding, kanonische Nullbits. Keine Leerzeichen, Zeilenumbrüche, URL-sichere Zeichen oder data:image/…;base64,-Präfixe. |
| JSON-Struktur | Ein Objekt mit genau einem Stringfeld. Keine zusätzlichen Felder, doppelten Schlüssel, Arrays oder null-Werte. |
| Bildgröße | Maximal 25 MiB = 26.214.400 dekodierte Bytes. Maximal 34.952.536 Base64-Zeichen. |
include_crop | Query-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 "${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.
| Feld | Typ | Bedeutung |
|---|---|---|
image | object | Breite, Höhe und coordinate_space: exif_oriented_pixels. Koordinaten beziehen sich auf das nach EXIF ausgerichtete Originalbild. |
documents | array | Null, ein oder mehrere getrennte Dokumentkandidaten. Eine leere Liste ist möglich. Keine Felder verschiedener Kandidaten zusammenführen. |
timed_out | boolean | true kennzeichnet ein unvollständiges Ergebnis. Auch bei HTTP 200 zuerst prüfen. |
processing_ms | number | Verarbeitungsdauer dieses Ergebnisses in Millisekunden; keine zugesagte Latenz. |
engine_version | string | Version des Erkennungskerns. Für Support und Kompatibilitätsdiagnose nutzen. |
Ergebniszustände
| Zustand | Bedeutung | Empfohlene Behandlung |
|---|---|---|
recognized | MRZ erkannt. | Felder, Prüfziffern, Korrekturen und Hinweise weiter prüfen. Nicht automatisch als Identitätsnachweis behandeln. |
uncertain | Erkennung oder Zuordnung ist unsicher. | Manuelle Prüfung oder neues Bild anfordern. Nicht automatisch importieren. |
no_mrz | Keine 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: true | Verarbeitung 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.
{
"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
| Feld | Typ | Bedeutung |
|---|---|---|
status | string | recognized · uncertain · no_mrz |
format | string | null | TD1 · TD2 · TD3 |
raw_mrz / mrz | string[] | Ursprüngliche und ausgewählte MRZ-Zeilen. Zeilenlängen und <-Füllzeichen erhalten. |
fields | object | Ausgelesene Daten. Werte sind String, Boolean oder null; nicht jedes Feld ist immer vorhanden. |
checks | object | Prüfobjekte für Dokumentnummer, Daten, optionale Daten und Gesamtprüfung. Siehe unten. |
corrections | array | line und index sind nullbasiert; from, to, score dokumentieren Zeichenkorrekturen. |
errors | string[] | Hinweise zum Kandidaten. Dies ist kein HTTP-Fehlerfeld. Vor Übernahme auswerten. |
document_quad / mrz_quad / crop_quad | array | null | Koordinatenpaare [x,y] der jeweiligen Geometrie. Nicht vorhandene Geometrie ist null. |
crop_basis | string | null | document, input_border_context, document_mrz_extension |
association_basis | string | null | Optionale Zuordnungsevidenz: unique_partial_overlap_surface, unique_continuous_surface_corridor, unique_context_detector_consensus. Kein Nachweis physischer Dokumentidentität. |
recognition_score / document_score | number | null | Interne Scores. Nicht als kalibrierte Richtigkeitswahrscheinlichkeit oder Prozentwert interpretieren. |
recognition_method | string | null | Bezeichnung des verwendeten Erkennungsverfahrens. Diagnosewert, kein festes Enum für Geschäftslogik. |
recognition_retry | object | null | Belege einer erneuten Lesung: Methode und vorheriger source_document ohne Bildbytes. Kann weitere Evidenz enthalten. |
crop_jpeg_base64 | string | null | Dokumentausschnitt als reine Base64-JPEG-Bytes. Kann fehlen oder null sein, insbesondere bei include_crop=false. Kein separat ausgeschnittenes Porträt. |
Die ausgelesenen Felder
| Feld | Bedeutung |
|---|---|
surname, given_names | Normalisierte Namen; ursprüngliche Lesung unter surname_raw, given_names_raw, names_raw. |
document_number | Vollständige Dokumentnummer; document_number_raw enthält das ursprüngliche Hauptfeld, document_number_extended markiert Fortsetzungen. |
document_code | Originaler zweistelliger Code, z. B. P<. |
issuing_state, nationality | MRZ-Codes einschließlich vorhandener Füllzeichen. Unbekannte Codes bleiben erhalten und werden gekennzeichnet. |
date_of_birth, date_of_expiry | Rohe MRZ-Daten im Format JJMMTT; unvollständige Geburtsdaten können < enthalten. Keine Jahrhundertbestimmung durch diesen Endpunkt. |
sex | MRZ-Wert M, F oder <. |
optional_data, optional_data_2, optional_data_remaining | Formatabhängige optionale Rohdaten. Daraus wird keine persönliche Identifikationsnummer geraten. |
Prüfziffern richtig interpretieren
{"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.
| Beleg | Bedeutung & Umgang |
|---|---|
| Prüfziffern | checksum_<name> in errors kennzeichnet eine fehlgeschlagene Prüfziffer. Die konkreten Werte stehen in checks. |
| Korrekturen | corrections und Abweichungen zwischen raw_mrz und mrz sichtbar prüfen. Nicht alle Felder sind durch Prüfziffern abgesichert. |
| Erneute Lesung | recognition_retry beschreibt eine erneute Lesung desselben verlustfreien Ausschnitts. source_document darin hält das vorherige Ergebnis ohne Bildbytes fest. |
| Dokumentzuordnung | association_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
Unbekannte Länder-/Staatencodes
Korrektur und Zeichenevidenz
Bildlage und Zeitbudget
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.
| HTTP | Fehler / Antwort | Was Ihre Anwendung tun sollte |
|---|---|---|
| 400 | invalid_content_length | Content-Length ist ungültig. Header vom HTTP-Client berechnen lassen. |
| 422 | invalid_request | JSON-Struktur ungültig: image_base64 fehlt, ist kein String oder es gibt zusätzliche Felder. Ein Objekt mit genau diesem Stringfeld senden. |
| 401 | unauthorized | Bearer-Token fehlt oder stimmt nicht. Schlüssel prüfen; unverändert nicht wiederholen. |
| 405 | detail | Falsche Methode. POST verwenden. |
| 408 | upload_timeout | Upload hat das Zeitfenster überschritten. Verbindung prüfen, kleinere Datei senden. |
| 413 | upload_too_large | Transport-, Base64- oder dekodiertes Dateilimit überschritten. Bild verkleinern; Base64 vergrößert die Datenmenge. |
| 413 | Bild-, Pixel- oder Decoderlimit. Bildabmessungen reduzieren; keine PDF an diesen Einbild-Endpunkt senden. | |
| 422 | invalid_json | JSON beschädigt, Schlüssel doppelt oder unzulässige JSON-Konstante. Gültiges UTF-8-JSON erzeugen. |
| 422 | invalid_base64 | Base64 leer, falsch oder nicht kanonisch. Originalbytes ohne Zeilenumbrüche standardkonform neu kodieren. |
| 422 | Kein nutzbares Bild. Unterstützte Datei mit lesbarer MRZ übermitteln. | |
| 422 | Formatabhängiger Decoderfehler. Datei prüfen oder verlustarm in JPEG/PNG umwandeln. | |
| 422 | 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. | |
| 422 | detail: […] | FastAPI-Validierung bei /v1/mrz, z. B. fehlendes Multipart-Feld oder ungültiger Query-Parameter. Felder/Parameter korrigieren. |
| 500 | processing_failed | Interner Verarbeitungs- oder Antwortfehler. Höchstens begrenzt erneut versuchen; bei Wiederholung Support kontaktieren. |
| 503 | service_busy | Begrenzte Verarbeitungskapazität belegt. Retry-After: 2 beachten, Parallelität reduzieren. |
| 504 | processing_timeout | Verarbeitung abgebrochen. Fehlerantwort enthält Timeout-Belege; nach kurzer Pause kleineres/geeigneteres Bild versuchen. |
| 4xx / 5xx | request_failed / detail | Allgemeiner HTTP- oder Proxyfehler. HTTP-Status und Content-Type auswerten; Fehlerantworten entsprechen nicht dem erfolgreichen MRZResponse-Modell. |
Fehlerformate unterscheiden
{"error":"invalid_base64"}{"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.
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.
Verarbeitungsergebnis prüfen
timed_out=false, gewünschter Kandidat vorhanden unddocuments[].status=recognized. Anzahl und Zuordnung der Kandidaten ausdrücklich prüfen. Teilfelder in negativen Ergebnissen nicht übernehmen.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.
Ü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
| Bereich | Verhalten |
|---|---|
| Enterprise API | 25 MiB dekodierte Bildbytes; 40 Millionen Pixel. Ein Bild pro Request. |
| Eingabeformate | JPEG, PNG, WebP, HEIC und unterstützte Kamera-RAW-Dateien. RAW-Unterstützung hängt vom konkreten Format/Kameramodell ab. |
Nicht an /v1/mrz senden. Eine Dokumentseite vorher als Bild bereitstellen. | |
| MRZ-Formate | TD1: 3 × 30 · TD2: 2 × 36 · TD3: 2 × 44 |
| Vorbereitete Enterprise-API: Antwort und Aufbewahrung | Synchrones 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.