ANMELDEN  login to app
Compliance

DSGVO-konforme Dokumentenverarbeitung

EU-Server, automatische Löschung nach 30 Min., AVV auf Anfrage. Für europäische Unternehmen entwickelt.

Compliance-Leitfaden lesen →
API v1

myocr.app API-Dokumentation

Eine einfache REST-API, um PDFs und Bilder in sauberes, strukturiertes Excel zu verwandeln. Authentifizieren Sie sich mit einem Header, senden Sie eine Datei und erhalten Sie eine Tabelle zurück.

Überblick

Die myocr.app-API wandelt Dokumentdateien (PDF, JPG, PNG) in strukturiertes Excel, CSV, Text oder JSON um. Sie senden eine Datei und einen Modellnamen; wir führen OCR und Layoutanalyse durch und liefern ein sauberes Ergebnis zurück.

Jede Anfrage wird mit einem API-Schlüssel authentifiziert, der im X-API-Key-Header übergeben wird. Antworten verwenden eine vorhersehbare JSON-Struktur, und jeder Aufruf liefert eine request_id zurück, die Sie für Support und Debugging nutzen können.

Verwenden Sie den synchronen Endpunkt für kleine Dateien, die Sie sofort beantwortet brauchen, und den asynchronen Jobs-Endpunkt (mit optionalem Webhook) für größere Dateien oder hohes Volumen.

Basis-URL: https://api.myocr.app Authentifizierung: X-API-Key

Authentifizierung

Authentifizieren Sie jede Anfrage mit dem X-API-Key-Header. Erstellen und verwalten Sie Schlüssel in Ihrem Dashboard unter /account/api. Zur Ausstellung eines Schlüssels ist eine verifizierte Zahlungskarte erforderlich (Missbrauchsschutz).

Es gibt zwei Schlüsseltypen: Test-Schlüssel (Präfix sk_test_) laufen gegen dieselbe Pipeline, ohne wo zutreffend kostenpflichtiges Kontingent zu verbrauchen, und Live-Schlüssel (Präfix sk_live_) für die Produktion. Halten Sie Schlüssel geheim und serverseitig — betten Sie sie niemals in clientseitigen Code ein.

Die Endpunkte zur Schlüsselverwaltung (/v1/keys) nutzen Ihre angemeldete Web-Sitzung, nicht den API-Schlüssel selbst.

curl https://api.myocr.app/v1/status \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx"
from myocr_client import MyOCRClient

client = MyOCRClient(api_key="sk_live_xxxxxxxxxxxx")
print(client.status())
const res = await fetch("https://api.myocr.app/v1/status", {
  headers: { "X-API-Key": "sk_live_xxxxxxxxxxxx" }
});
console.log(await res.json());

Schnellstart

Wandeln Sie Ihr erstes Dokument in unter einer Minute um. Holen Sie sich einen Schlüssel aus dem Dashboard und senden Sie dann eine Multipart-Anfrage mit Ihrer Datei und dem gewünschten Modell.

Das folgende Beispiel wandelt ein beliebiges PDF oder Bild mit Tabellen in eine .xlsx-Tabelle um und speichert sie als out.xlsx.

curl -X POST https://api.myocr.app/v1/convert \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "file=@invoice.pdf" \
  -F "model=tables" \
  -o out.xlsx
from myocr_client import MyOCRClient

client = MyOCRClient(api_key="sk_live_xxxxxxxxxxxx")
result = client.convert("invoice.pdf", model="tables")
result.save("out.xlsx")
import fs from "node:fs";

const form = new FormData();
form.append("file", new Blob([fs.readFileSync("invoice.pdf")]), "invoice.pdf");
form.append("model", "tables");

const res = await fetch("https://api.myocr.app/v1/convert", {
  method: "POST",
  headers: { "X-API-Key": "sk_live_xxxxxxxxxxxx" },
  body: form,
});
fs.writeFileSync("out.xlsx", Buffer.from(await res.arrayBuffer()));

Synchrone Umwandlung

Methode: POST /v1/convert Authentifizierung erforderlich: Ja Rate-Limit: 60/min

POST /v1/convert akzeptiert eine einzelne Datei (max. 5 MB, max. 10 Seiten) und gibt die Ergebnisdatei direkt im Antworttext zurück — standardmäßig ein .xlsx oder Text/JSON/CSV, wenn Sie den output-Parameter setzen.

Dieser Endpunkt eignet sich am besten, wenn Sie die Antwort sofort brauchen. Für größere Dateien oder Batches verwenden Sie stattdessen asynchrone Jobs.

Parameter

NameTypErforderlichBeschreibung
filefileJaThe document to convert (PDF, JPG, PNG). Multipart field.
modelstringJaOne of: tables, text, invoice, receipt, bank_statement, business_card.
outputstringNeinxlsx (default), txt, json or csv.

Asynchrone Jobs

Methode: POST /v1/jobs Authentifizierung erforderlich: Ja Rate-Limit: 120/min

Für Dateien bis 50 MB (und PDFs bis 500 Seiten) oder höheren Durchsatz erstellen Sie einen Job mit POST /v1/jobs. Der Aufruf liefert sofort eine request_id zurück; die Datei wird im Hintergrund verarbeitet. PDFs über dem Seitenlimit werden vorab mit TOO_MANY_PAGES abgelehnt — teilen Sie das Dokument auf.

Fragen Sie GET /v1/jobs/{request_id} für den Status ab (pending → processing → done/failed) und laden Sie das Ergebnis dann von GET /v1/jobs/{request_id}/result herunter. Geben Sie eine webhook_url an, um automatisch benachrichtigt zu werden, wenn der Job fertig ist, statt zu pollen.

NameTypErforderlichBeschreibung
filefileJaDocument up to 50 MB.
modelstringJaConversion model (see Models).
webhook_urlstringNeinHTTPS URL notified (signed) when the job finishes.
# 1. create the job
curl -X POST https://api.myocr.app/v1/jobs \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "file=@statement.pdf" -F "model=bank_statement"
# → {"success": true, "data": {"request_id": "abcd1234"}}

# 2. poll status, then download the result
curl https://api.myocr.app/v1/jobs/abcd1234 -H "X-API-Key: sk_live_xxxxxxxxxxxx"
curl https://api.myocr.app/v1/jobs/abcd1234/result -H "X-API-Key: sk_live_xxxxxxxxxxxx" -o out.xlsx
job = client.create_job("statement.pdf", model="bank_statement")
job.wait()                     # polls with backoff until done
job.result().save("out.xlsx")

Batch-Umwandlung

Methode: POST /v1/batch Authentifizierung erforderlich: Ja Rate-Limit: 30/min

POST /v1/batch akzeptiert 1–20 Dateien in einer einzigen Multipart-Anfrage, alle mit demselben Modell verarbeitet. Jede Datei wird unabhängig gemeldet; Fehler pro Datei werden in einem errors-Array zurückgegeben, ohne den gesamten Batch fehlschlagen zu lassen.

curl -X POST https://api.myocr.app/v1/batch \
  -H "X-API-Key: sk_live_xxxxxxxxxxxx" \
  -F "files=@a.pdf" -F "files=@b.pdf" -F "files=@c.jpg" \
  -F "model=invoice"

Modelle

Übergeben Sie einen dieser model-Werte. tables und text laufen auf unserer OCR-Engine; die spezialisierten Modelle liefern domänenspezifische Felder zurück.

ModellWas es extrahiert
tablesJedes Dokument mit Tabellen → ein Blatt pro Tabelle, Layout erhalten. Der Allzweck-Standard.
textVollständige Klartextextraktion (OCR) aus jedem Dokument. Liefert immer txt zurück.
invoiceRechnungsfelder: Lieferant, Datum, Summen, USt. und Positionen.
receiptBelegfelder: Händler, Datum, Summe, Steuer und Positionen — ideal für Spesenabrechnungen.
bank_statementKontoauszug-Zeilen: Datum, Beschreibung, Soll, Haben und laufender Saldo. Inklusive automatischer Saldenprüfung (Abstimmung).
business_cardKontaktfelder von Visitenkarten: Name, Firma, Rolle, E-Mail, Telefon.

Ausgabeformate

Setzen Sie den output-Parameter, um das Antwortformat zu wählen: xlsx (Standard, strukturierte Tabelle), txt (Klartext), json (extrahierte Felder als JSON) oder csv. Das Modell text liefert immer txt zurück.

Für model=bank_statement können Sie output auch auf csv_quickbooks (4-spaltige CSV für den Bankimport), csv_xero (Xero-Importvorlage) oder ofx (Standard-OFX-Datei für die meisten Buchhaltungsprogramme) setzen. Mit output=json enthält die Antwort zusätzlich ein reconciliation-Objekt: Anfangs-/Endsaldo, Summe der Gut- und Lastschriften, die berechnete Differenz und ok=true, wenn die extrahierten Transaktionen mit den Salden des Auszugs übereinstimmen.

Antworten & Header

JSON-Antworten folgen einer festen Struktur: einem success-Boolean, einem data-Objekt (oder einem error-Objekt) und einer request_id. Datei-Antworten geben die Binärdaten direkt mit dem passenden Content-Type zurück.

Jede Antwort enthält den Header X-MyOCR-Request-Id. Datei-Antworten enthalten zusätzlich X-MyOCR-Pages-Used (abgerechnete Seiten) und X-MyOCR-Model (das verwendete Modell).

{
  "success": true,
  "data": { "request_id": "abcd1234" },
  "request_id": "abcd1234"
}

Fehler

Fehler geben success: false mit einem error.code und einer menschenlesbaren error.message sowie der request_id zurück. Nutzen Sie den code (stabil) für Verzweigungen, die message (kann sich ändern) für Menschen.

CodeHTTPBedeutung
MISSING_API_KEY401Es wurde kein X-API-Key-Header gesendet.
INVALID_API_KEY401Der API-Schlüssel ist unbekannt, widerrufen oder fehlerhaft.
UNSUPPORTED_MODEL400Der model-Wert ist keines der unterstützten Modelle.
UNSUPPORTED_FILE_TYPE400Dateiendung/-typ wird nicht akzeptiert (verwenden Sie PDF, JPG, PNG).
MISSING_FILE400Der Anfrage wurde keine Datei beigefügt.
FILE_TOO_LARGE413Die Datei überschreitet die Größenbeschränkung des Endpunkts.
TOO_MANY_PAGES413Das Dokument hat mehr Seiten, als der Endpunkt erlaubt.
INVALID_WEBHOOK_URL400Die webhook_url fehlt oder ist keine gültige HTTPS-URL.
INSUFFICIENT_PAGES402Nicht genügend Seiten-Credits, um die Anfrage zu verarbeiten.
QUOTA_EXCEEDED402Monatliches Seitenkontingent erschöpft — gibt eine upgrade_url zurück.
CARD_REQUIRED402Eine verifizierte Zahlungskarte ist erforderlich, bevor API-Schlüssel erstellt oder die Testphase genutzt werden kann.
NO_ACTIVE_PLAN403Kein aktiver Plan auf diesem Konto — abonnieren Sie einen Plan, um die API zu nutzen.
SPEND_CAP_REACHED402Ihre monatliche Ausgabenobergrenze ist erreicht — erhöhen Sie die Grenze oder wechseln Sie zu einem höheren Plan.
NOT_READY409Der Job ist noch nicht fertig; das Ergebnis ist nicht verfügbar.
NOT_FOUND404Der angeforderte Job oder die Ressource existiert nicht.
OCR_ERROR502Die vorgelagerte OCR-Engine konnte das Dokument nicht verarbeiten.
STORAGE_ERROR502Der temporäre Speicher (Upload/Ergebnis) ist fehlgeschlagen — eine Wiederholung ist sicher.
SERVICE_NOT_READY503Ein erforderlicher Dienst ist noch nicht konfiguriert/aktiviert.
INTERNAL_ERROR500Unerwarteter Serverfehler — wiederholen Sie es und kontaktieren Sie dann den Support mit der request_id.

Rate-Limits & Kontingent

Rate-Limits werden pro API-Schlüssel (nicht pro IP) durchgesetzt, sodass Clients hinter einem gemeinsamen Proxy sich kein Limit teilen: /v1/convert 60 Anf./Min., /v1/jobs 120 Anf./Min., /v1/batch 30 Anf./Min.

Abrechnung pro Seite, nicht pro Aufruf. Pläne: Free 10 Seiten gesamt (einmalig, Karte erforderlich), Starter 29 €/Monat (2.500), Pro 99 €/Monat (10.000), Scale 190 €/Monat (20.000). Der Dienst wird nie unterbrochen: Sind die Seiten des Monats aufgebraucht, benachrichtigen wir Sie per E-Mail und buchen ein Zusatzpaket zum Seitenpreis Ihres Plans ab — Starter 500 zu 0,0116 €, Pro 2.000 zu 0,0099 €, Scale 4.000 zu 0,0095 € — bis zu einem monatlichen Auto-Aufladelimit, das Sie festlegen (und deaktivieren können). Ist das Limit erreicht, gibt die API 402 mit einer upgrade_url zurück. Prüfen Sie die Nutzung mit GET /v1/usage.

Webhooks

Wenn Sie /v1/jobs eine webhook_url übergeben, senden wir per POST eine JSON-Payload an diese URL, sobald der Job done oder failed erreicht. Zustellungen werden bei Fehlern mit Backoff wiederholt.

Jede Zustellung ist signiert: Überprüfen Sie den Signatur-Header mit Ihrem Webhook-Signing-Secret (im Dashboard angezeigt), um zu bestätigen, dass die Anfrage wirklich von myocr.app stammt. Das Python-SDK enthält einen verify_webhook_signature-Helfer.

SDKs

Das offizielle Python-SDK (myocr-client) kapselt jeden Endpunkt mit typisierten Methoden und Ausnahmen, automatischem Job.wait()-Polling mit Backoff und Webhook-Signaturprüfung.

Lieber rohes HTTP? Jeder HTTP-Client funktioniert — siehe die cURL- und Node-Beispiele in diesem Leitfaden und die vollständige interaktive Referenz.

pip install myocr-client

OpenAPI-Spezifikation

OpenAPI-Spezifikation herunterladen

OpenAPI 3.1 (openapi.json) · Postman · Insomnia · code generators

OpenAPI-Spezifikation herunterladen

FAQ

Welche Dateitypen und -größen werden unterstützt?

PDF, JPG und PNG. Synchrones /v1/convert erlaubt bis 5 MB und 10 Seiten; asynchrones /v1/jobs verarbeitet Dateien bis 50 MB.

Wie wird die Nutzung abgerechnet?

Pro verarbeiteter Seite, über alle Endpunkte gezählt und monatlich zurückgesetzt. Der Header X-MyOCR-Pages-Used zeigt Ihnen, wie viele Seiten jeder Aufruf abgerechnet hat.

Was ist der Unterschied zwischen Test- und Live-Schlüsseln?

Test-Schlüssel (sk_test_) sind für Entwicklung und Integrationstests; Live-Schlüssel (sk_live_) sind für Produktionsverkehr. Beide authentifizieren sich auf dieselbe Weise.

Soll ich synchron oder asynchron verwenden?

Verwenden Sie /v1/convert für kleine Dateien, die Sie sofort beantwortet brauchen. Verwenden Sie /v1/jobs (optional mit einem Webhook) für große Dateien, Batches oder Hintergrundverarbeitung.

Wo sehe ich jeden Parameter und jedes Schema?

Jeder Endpunkt, Parameter und jede Antwort ist in den obigen Abschnitten dokumentiert. Für die maschinelle Nutzung laden Sie die OpenAPI-Spezifikation (openapi.json) herunter und importieren Sie sie in Postman, Insomnia oder einen Client-Generator.

Produktivität

100 Rechnungen in 10 Minuten umwandeln

Tipps und Vorlagen zur Stapelverarbeitung. Kostenloser Leitfaden.

Leitfaden lesen →