Warum Teams die API nutzen, statt eine eigene OCR-Lösung zu entwickeln

Allgemeine OCR wandelt Handschrift in einfachen Text um. Scrivenos Verarbeitung erhält dagegen die ursprüngliche Struktur: Gleichungen bleiben Gleichungen, handgezeichnete Diagramme und chemische Strukturen werden erkannt und übernommen statt verworfen. Aus einer Transkription entstehen professionell gesetztes LaTeX, eine erstellte PDF und ein bearbeitbares DOCX mit echten Word-Gleichungen – nicht drei voneinander unabhängige Exporte mit jeweils bestmöglichem Ergebnis.

  • Asynchron einreichen, Status abrufen und herunterladen oder nach Abschluss eines Auftrags per Webhook benachrichtigt werden
  • HMAC-signierte Webhook-Daten mit Idempotenzschlüssel, damit Wiederholungsversuche sicher sind
  • PDF, DOCX, Markdown oder LaTeX-Quellcode – alles aus derselben Anfrage
  • Kostenloser Zugang – nur 0,003 $ pro konvertierter Seite, ohne monatlichen Mindestumsatz

Erstelle kostenlos ein Konto und hol dir deinen API-Schlüssel

Schnellstart

Reiche eine Datei ein, frage den Status ab und lade das Ergebnis herunter – genau wie in der Web-App.

Einreichen

curl -X POST https://api.scriveno.com/api/v1/convert \
  -H "Authorization: Bearer isk_live_YOUR_API_KEY" \
  -H "Idempotency-Key: <your-own-uuid>" \
  -F "file=@notes.pdf" \
  -F "webhookUrl=https://example.com/webhooks/scriveno"

Status prüfen

curl https://api.scriveno.com/api/v1/convert/{jobId} \
  -H "Authorization: Bearer isk_live_YOUR_API_KEY"

Herunterladen

curl https://api.scriveno.com/api/v1/convert/{jobId}/download/pdf \
  -H "Authorization: Bearer isk_live_YOUR_API_KEY" \
  -o result.pdf

Deine Aufträge auflisten

curl "https://api.scriveno.com/api/v1/convert?page=1&pageSize=20" \
  -H "Authorization: Bearer isk_live_YOUR_API_KEY"

Auftrag abbrechen

curl -X POST https://api.scriveno.com/api/v1/convert/{jobId}/cancel \
  -H "Authorization: Bearer isk_live_YOUR_API_KEY"

Webhooks

Gib beim Einreichen die Adresse webhookUrl an. Sobald der Auftrag den Status completed, failed oder cancelled erreicht, sendet Scriveno eine POST-Anfrage dorthin. So musst du den Status nicht regelmäßig abfragen.

POST <your webhookUrl>
Content-Type: application/json
X-Scriveno-Signature: sha256=<hex-encoded HMAC-SHA256 of the raw body below>
X-Scriveno-Timestamp: <unix seconds when this delivery was signed>
X-Scriveno-Signature-V2: sha256=<hex-encoded HMAC-SHA256 of "<timestamp>.<raw body>">

{
  "jobId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "status": "completed",
  "totalPages": 3,
  "completedPages": 3,
  "errorMessage": null,
  "downloads": {
    "pdf": "https://api.scriveno.com/api/v1/convert/{jobId}/download/pdf",
    "docx": "https://api.scriveno.com/api/v1/convert/{jobId}/download/docx",
    "markdown": "https://api.scriveno.com/api/v1/convert/{jobId}/download/markdown",
    "latex": "https://api.scriveno.com/api/v1/convert/{jobId}/download/latex"
  }
}

Überprüfe die Signatur, bevor du einer Nutzlast vertraust – jeder kann eine Anfrage an deinen Endpunkt senden. Berechne mit dem Webhook-Secret deines API-Schlüssels (es wird beim Erstellen des Schlüssels einmalig angezeigt) einen HMAC-SHA256 über den unveränderten Anfragetext. Wandle das Ergebnis in Hexadezimalzeichen um und vergleiche es mit dem Teil nach sha256= im Header X-Scriveno-Signature. Verwende dafür einen zeitkonstanten Vergleich. Bevorzuge X-Scriveno-Signature-V2: Diese Signatur umfasst auch X-Scriveno-Timestamp, sodass du eine später erneut gesendete abgefangene Zustellung zurückweisen kannst.

// pseudocode
ts = header["X-Scriveno-Timestamp"]
if abs(now_unix_seconds() - int(ts)) > 300: reject
expected = hex(hmac_sha256(webhookSecret, ts + "." + rawRequestBody))
received = header["X-Scriveno-Signature-V2"].removePrefix("sha256=")
if !constantTimeEquals(expected, received): reject