Seitenübersicht
Deutsch
EUR €
NEU
Claude & ChatGPT — Mit Superkraft.
Alle Dokumente · 409+ AI-Tools · 30s Setup
Claude· ChatGPT· Cursor· Gemini· +50
Jetzt verbinden
Plattform
50+ AI-Module & Tools
Lösungen
Branchen, Prozesse, Risiken
Entwickler
API, SDKs, Dokumentation
Ressourcen
Tutorials, Blog, Support
Unternehmen
Team, Partner, Karriere
Preise
Webhooks

Webhooks Echtzeit-Events

HMAC-signierte Callbacks fuer jedes Dokument-, Job-, Workspace- und Task-Event. 22 Event-Typen, exponentielle Retries, HTTPS empfohlen.

22+
Event-Typen
<1s
Latenz
HMAC
SHA-256 signiert
POST /dein-endpoint
Request Headers
X-PaperOffice-Event: document.processed
X-PaperOffice-Event-ID: a3b7f9c1d4e8b2a6
X-PaperOffice-Signature: sha256=9f8a2c…
JSON Body
{
  "event_type": "document.processed",
  "event_id": "a3b7f9c1d4e8b2a6",
  "timestamp": "2026-04-17T14:23:11Z",
  "subscription_id": 42,
  "data": { "pofid": "doc_01HZY8K3…" }
}
Signatur verifiziert HMAC-SHA256 · Event-ID geloggt

Vertraut von führenden Unternehmen weltweit

Verfuegbare Events

22 Event-Typen, gruppiert nach Entitaet

Abonniere einzelne Events oder nutze den Platzhalter * fuer alle.

Dokumente

14
  • document.uploaded Neues Dokument in einen Workspace hochgeladen
  • document.created Alias fuer document.uploaded (Kompatibilitaet)
  • document.processed OCR/IDP-Pipeline erfolgreich abgeschlossen
  • document.edited Metadaten, Tags oder Inhalt aktualisiert
  • document.deleted Dokument in Papierkorb verschoben
  • document.restored Dokument aus Papierkorb wiederhergestellt
  • document.moved Dokument zwischen Workspaces verschoben
  • document.version_created Neue Version eines bestehenden Dokuments
  • document.lifecycle_changed Aufbewahrungs-/Archivierungsstatus geaendert
  • document.comment_added Kommentar zu einem Dokument erstellt
  • document.note_added Interne Notiz angehaengt
  • document.tag_added Tag einem Dokument zugewiesen
  • document.legal_hold_placed Legal Hold aktiviert (unveraenderlich)
  • document.legal_hold_released Legal Hold freigegeben

Jobs

3
  • job.completed Async-Job erfolgreich beendet
  • job.failed Async-Job endgueltig fehlgeschlagen
  • job.progress Fortschritts-Update bei laengeren Jobs

Workspaces

2
  • workspace.shared Workspace mit Benutzer oder Team geteilt
  • workspace.unshared Workspace-Zugriff entzogen

Tasks

3
  • task.created Neue Aufgabe erstellt
  • task.completed Aufgabe als erledigt markiert
  • task.overdue Aufgabe hat ihr Faelligkeitsdatum ueberschritten

Abonniere ["*"], um jedes Event deines Kontos zu empfangen.

Payload & Headers

Jede Zustellung folgt demselben Schema

Vorhersagbarer JSON-Body, fuenf signierte HTTP-Header, ISO-8601-UTC-Zeitstempel.

Request Body (JSON)
{
  "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
    }
  }
}
HTTP Request Headers
Content-Type application/json Immer JSON, UTF-8-kodiert
User-Agent PaperOffice-Webhook/1.0 Fester Identifier fuer Firewall-Allowlists
X-PaperOffice-Event document.processed Zugestellter Event-Typ
X-PaperOffice-Event-ID a3b7f9c1… 128-Bit-eindeutige ID. Nutze sie als Idempotency-Key.
X-PaperOffice-Subscription-ID 42 ID des Abonnements, das das Event empfaengt
X-PaperOffice-Signature sha256=… HMAC-SHA256 des Raw-Bodys, hex-kodiert
Signatur-Verifizierung

Verifiziere jede Zustellung mit HMAC-SHA256

Berechne HMAC-SHA256 ueber den rohen Request-Body mit deinem 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');
});
Retry & Zustellung

Drei Retry-Strategien, bis zu 10 Versuche

Waehle die Policy pro Abonnement. Jeder Versuch wird mit Statuscode, Response-Body und Zeitmessung geloggt.

linear

Linear

Festes Wachstum: 30s, 60s, 90s, 120s, 150s…

none

Keine

Fire-and-forget. Keine Retries, auch nicht bei 5xx. Nuetzlich fuer Test-Hooks.

Erfolg HTTP 2xx innerhalb deines Timeout-Fensters
Max Retries 0–10 Versuche (Default 5)
Timeout 1.000–30.000 ms pro Versuch (Default 10.000)
Delivery-Log Jeder Versuch liegt in webhook_deliveries fuer die Revision
Management-API

9 Endpoints unter /latest/webhooks/

Voller CRUD fuer Abonnements, Zustell-Logs, einmalige Job-Abonnements und ein Test-Endpoint — alles OAuth2 Bearer, alles MCP-bereit.

POST /webhooks/subscribe Neues Abonnement erstellen (unbegrenzte Anzahl pro Account) po_webhooks_subscribe
GET /webhooks/list Alle Abonnements des Accounts auflisten po_webhooks_list
POST /webhooks/update Bestehendes Abonnement aktualisieren po_webhooks_update
POST /webhooks/delete Abonnement soft-loeschen (Delivery-Log bleibt erhalten) po_webhooks_delete
GET /webhooks/deliveries Delivery-Log mit Filtern abrufen (event_type, success_only) po_webhooks_deliveries
POST /webhooks/test Test-Event (test.ping) zur Zustell-Verifizierung senden po_webhooks_test
POST /webhooks/subscribe-job Einmaliger Webhook fuer eine spezifische job_id po_webhooks_subscribe_job
GET /webhooks/job-subscriptions Job-gebundene Abonnements auflisten po_webhooks_job_subscriptions
GET /webhooks/info Verfuegbare Events, Endpoints, Retry-Policies, Signatur-Infos po_webhooks_info
Enterprise-Sicherheit

Von Grund auf gehaertet

HMAC-SHA256

Jedes Payload wird mit deinem 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 fuer Produktion dringend empfohlen.

Event-ID-Idempotenz

Jede Zustellung bringt eine eindeutige X-PaperOffice-Event-ID mit. Dedupliziere auf deiner Seite.

Voller Audit-Trail

Alle Versuche werden geloggt: Statuscode, Response-Body, Timing, Error-Message.

Limits

Unbegrenzte Abonnements, Zustellverhalten flexibel konfigurierbar

Abonnements / Account
Aktive Job-Abonnements
10.000 ms
Default-Timeout
5
Default Max-Retries

Verfuegbar in allen Plaenen. Pay-per-Use: 1 Credit pro erfolgreich zugestellter Auslösung (HTTP 2xx). Retries, Test-Events und fehlgeschlagene Zustellungen sind kostenlos.

Jetzt starten

Dein erster Webhook in 60 Sekunden

Endpoint bereitstellen, per API abonnieren, Test-Event feuern. Das war's.

HMAC-SHA256 Exponentielles Back-off Voller Audit-Trail