Webhooks Echtzeit-Events
Erhalten Sie Echtzeit-Benachrichtigungen über alle Ereignisse. Dokumente verarbeitet, OCR abgeschlossen, Klassifizierung fertig.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Vertraut von führenden Unternehmen weltweit
22 Event-Typen, gruppiert nach Entität
Abonniere einzelne Events oder nutze den Platzhalter * für alle.
Dokumente
14-
Dokument hochgeladenNeues Dokument in einen Workspace hochgeladen -
Dokument erstelltAlias für document.uploaded (Kompatibilität) -
Dokument verarbeitetOCR/AI-IDP-Pipeline erfolgreich abgeschlossen -
Dokument bearbeitetMetadaten, Tags oder Inhalt aktualisiert -
Dokument gelöschtDokument in Papierkorb verschoben -
Dokument wiederhergestelltDokument aus Papierkorb wiederhergestellt -
document.movedDokument zwischen Workspaces verschoben -
Dokument.Version_erstelltNeue Version eines bestehenden Dokuments -
Dokument.Lebenszyklus_geändertAufbewahrungs-/Archivierungsstatus geändert -
Dokument.Kommentar_hinzugefügtKommentar zu einem Dokument erstellt -
Dokument.Notiz_hinzugefügtInterne Notiz angehängt -
Dokument.Tag_hinzugefügtTag einem Dokument zugewiesen -
Dokument.Legal_Hold_gesetztLegal Hold aktiviert (unveränderlich) -
Dokument.Legal_Hold_aufgehobenLegal Hold freigegeben
Aufträge
3-
Auftrag.abgeschlossenAsync-Job erfolgreich beendet -
Auftrag.fehlgeschlagenAsync-Job endgültig fehlgeschlagen -
Auftrag.FortschrittFortschritts-Update bei längeren Jobs
Workspaces
2-
Arbeitsbereich.geteiltWorkspace mit Benutzer oder Team geteilt -
Arbeitsbereich.Freigabe_aufgehobenWorkspace-Zugriff entzogen
Aufgaben
3-
Aufgabe.erstelltNeue Aufgabe erstellt -
Aufgabe.abgeschlossenAufgabe als erledigt markiert -
Aufgabe.überfälligAufgabe hat ihr Fälligkeitsdatum überschritten
Jede Zustellung folgt demselben Schema
Vorhersagbarer JSON-Body, fünf signierte HTTP-Header, ISO-8601-UTC-Zeitstempel.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6c9f1d4e7b2a5c8f1",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": {
"pofid": "doc_01HZY8K3M7P2Q9R5T1V6W4X2Y8",
"workspace_id": 17,
"filename": "invoice-2026-04-17.pdf",
"mime_type": "application/pdf",
"size_bytes": 284521,
"processing_result": {
"ocr_done": true,
"classification": "invoice",
"confidence": 0.98
}
}
} Content-Type application/json Immer JSON, UTF-8-kodiert User-Agent PaperOffice-Webhook/1.0 Fester Identifier für Firewall-Allowlists X-PaperOffice-Event document.processed Zugestellter Event-Typ X-PaperOffice-Event-ID a3b7f9c1… 128-Bit-eindeutige ID. Nutzen Sie sie als Idempotency-Key. X-PaperOffice-Subscription-ID 42 ID des Abonnements, das das Event empfängt X-PaperOffice-Signature sha256=… HMAC-SHA256 des Raw-Bodys, hex-kodiert Verifiziere jede Zustellung mit HMAC-SHA256
Berechnen Sie HMAC-SHA256 über den rohen Request-Body mit Ihrem gemeinsamen Secret und vergleiche dann gegen X-PaperOffice-Signature — zwingend mit konstanter Laufzeit (hash_equals, crypto.timingSafeEqual).
import crypto from 'crypto';
import express from 'express';
const app = express();
const WEBHOOK_SECRET = process.env.PAPEROFFICE_WEBHOOK_SECRET;
app.post('/webhooks/paperoffice', express.raw({ type: 'application/json' }), (req, res) => {
const signature = req.header('X-PaperOffice-Signature'); // "sha256=..."
const eventId = req.header('X-PaperOffice-Event-ID');
const eventType = req.header('X-PaperOffice-Event');
const expected = 'sha256=' + crypto
.createHmac('sha256', WEBHOOK_SECRET)
.update(req.body)
.digest('hex');
if (!signature || !crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send('invalid signature');
}
const event = JSON.parse(req.body.toString());
// eventId als Idempotency-Key speichern -> gleiche ID nicht zweimal verarbeiten
console.log(eventType, event.data);
res.status(200).send('ok');
}); Drei Retry-Strategien, bis zu 10 Versuche
Wählen Sie die Policy pro Abonnement. Jeder Versuch wird mit Statuscode, Response-Body und Zeitmessung geloggt.
exponential Exponential (Standard)
Back-off verdoppelt sich nach jedem Versuch: 30s, 60s, 120s, 240s, 480s…
linear Linear
Festes Wachstum: 30s, 60s, 90s, 120s, 150s…
none Keine
Fire-and-forget. Keine Retries, auch nicht bei 5xx. Nützlich für Test-Hooks.
9 Endpoints unter /latest/webhooks/
Voller CRUD für Abonnements, Zustell-Logs, einmalige Job-Abonnements und ein Test-Endpoint — alles OAuth2 Bearer, alles MCP-bereit.
/webhooks/subscribe Neues Abonnement erstellen (unbegrenzte Anzahl pro Account) po_webhooks_subscribe /webhooks/list Alle Abonnements des Accounts auflisten po_webhooks_list /webhooks/update Bestehendes Abonnement aktualisieren po_webhooks_update /webhooks/delete Abonnement soft-löschen (Delivery-Log bleibt erhalten) po_webhooks_delete /webhooks/deliveries Delivery-Log mit Filtern abrufen (event_type, success_only) po_webhooks_deliveries /webhooks/test Test-Event (test.ping) zur Zustell-Verifizierung senden po_webhooks_test /webhooks/subscribe-job Einmaliger Webhook für eine spezifische job_id po_webhooks_subscribe_job /webhooks/job-subscriptions Job-gebundene Abonnements auflisten po_webhooks_job_subscriptions /webhooks/info Verfügbare Events, Endpoints, Retry-Policies, Signatur-Infos po_webhooks_info Von Grund auf gehärtet
HMAC-SHA256
Jedes Payload wird mit Ihrem Secret signiert. Vergleich muss zwingend konstante Laufzeit haben.
SSRF-Schutz
Private/interne IPs, Localhost und Cloud-Metadata-Endpoints werden beim Abonnieren und Dispatch blockiert.
DNS-Rebinding-sicher
IP wird beim Dispatch erneut validiert und per CURLOPT_RESOLVE gepinnt.
HTTPS dringend empfohlen
http und https werden akzeptiert. HTTPS für Produktion dringend empfohlen.
Event-ID-Idempotenz
Jede Zustellung bringt eine eindeutige X-PaperOffice-Event-ID mit. Dedupliziere auf Ihrer Seite.
Voller Audit-Trail
Alle Versuche werden geloggt: Statuscode, Response-Body, Timing, Error-Message.
Unbegrenzte Abonnements, Zustellverhalten flexibel konfigurierbar
Verfügbar in allen Plänen. Pay-per-Use: 1 Credit pro erfolgreich zugestellter Auslösung (HTTP 2xx). Retries, Test-Events und fehlgeschlagene Zustellungen sind kostenlos.
Events empfangen?
Konfigurieren Sie Ihre Webhooks.