Webhooks Real-time gebeurtenissen
Ontvang real-time meldingen voor alle gebeurtenissen. Documenten verwerkt, OCR voltooid, classificatie afgerond.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Vertrouwd door toonaangevende bedrijven wereldwijd
22 gebeurtenistypen, gegroepeerd per entiteit
Abonneer u op individuele gebeurtenissen of gebruik het jokerteken * voor alles.
Documenten
14-
document.geüploadNieuw document geüpload naar een werkruimte -
document.aangemaaktAlias voor document.uploaded (compatibiliteit) -
document.verwerktOCR/AI-IDP-pipeline succesvol afgerond -
document.bewerktMetadata, tags of inhoud bijgewerkt -
document.verwijderdDocument verplaatst naar prullenbak -
document.hersteldDocument hersteld vanuit prullenbak -
document.verplaatstDocument verplaatst tussen werkruimten -
document.versie_aangemaaktNieuwe versie toegevoegd aan een bestaand document -
document.levenscyclus_gewijzigdBewaar-/archiveringsstatus gewijzigd -
document.opmerking_toegevoegdReactie geplaatst op een document -
document.notitie_toegevoegdInterne notitie bijgevoegd -
document.label_toegevoegdTag toegewezen aan een document -
document.juridische_bevriezing_geplaatstJuridische vergrendeling geactiveerd (onveranderlijk) -
document.juridische_bevriezing_opgehevenJuridische vergrendeling opgeheven
Taken
3-
taak.voltooidAsynchrone taak succesvol voltooid -
taak.misluktAsynchrone taak definitief mislukt -
taak.voortgangVoortgangsupdate tijdens langlopende taken
Workspaces
2-
werkruimte.gedeeldWorkspace gedeeld met een gebruiker of team -
werkruimte.delen_opgehevenToegang tot Workspace ingetrokken
Opdrachten
3-
taak.aangemaaktNieuwe opdracht aangemaakt -
taak.voltooidOpdracht gemarkeerd als voltooid -
taak.verlopenOpdracht heeft de vervaldatum overschreden
Elke levering volgt hetzelfde schema
Voorspelbare JSON-body, vijf ondertekende HTTP-headers, ISO-8601 UTC-tijdstempels.
{
"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 Altijd JSON, UTF-8 gecodeerd User-Agent PaperOffice-Webhook/1.0 Vaste identifier voor firewall-toestemmingslijsten X-PaperOffice-Event document.verwerkt Gebeurtenistype dat wordt geleverd X-PaperOffice-Event-ID a3b7f9c1… 128-bit unieke ID. Gebruik voor idempotentie. X-PaperOffice-Subscription-ID 42 ID van het abonnement dat de gebeurtenis ontvangt X-PaperOffice-Signature sha256=… HMAC-SHA256 van de ruwe body, hex-gecodeerd Verifieer elke levering met HMAC-SHA256
Bereken HMAC-SHA256 over de ruwe verzoekbody met uw gedeelde geheim en vergelijk dit vervolgens met X-PaperOffice-Signature met behulp van een constant-tijdvergelijking (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');
}); Drie opnieuw proberen-strategieën, tot 10 pogingen
Kies een beleid per abonnement. Elke poging wordt gelogd met statuscode, antwoordbody en timing.
exponential Exponentieel (standaard)
Back-off verdubbelt na elke poging: 30s, 60s, 120s, 240s, 480s…
linear Lineair
Vaste groei: 30s, 60s, 90s, 120s, 150s…
none Geen
Fire-and-forget. Geen opnieuw proberen, zelfs niet bij 5xx. Handig voor test-webhooks.
9 eindpunten onder /latest/webhooks/
Volledige CRUD voor abonnementen, leveringslogboeken, eenmalige taakabonnementen en een test-eindpunt — allemaal OAuth2 Bearer, allemaal MCP-gereed.
/webhooks/subscribe Maak een nieuw abonnement aan (onbeperkt per account) po_webhooks_subscribe /webhooks/list Toon alle abonnementen van het account po_webhooks_list /webhooks/update Werk een bestaand abonnement bij po_webhooks_update /webhooks/delete Zacht verwijderen van een abonnement (leveringslogboek behouden) po_webhooks_delete /webhooks/deliveries Haal leveringslogboek op met filters (event_type, success_only) po_webhooks_deliveries /webhooks/test Verzend een test.ping-gebeurtenis om de levering te verifiëren po_webhooks_test /webhooks/subscribe-job Eenmalige webhook voor een specifieke job_id po_webhooks_subscribe_job /webhooks/job-subscriptions Toon taak-gebonden abonnementen po_webhooks_job_subscriptions /webhooks/info Beschikbare gebeurtenissen, eindpunten, opnieuw proberen-beleidsregels, handtekeninginformatie po_webhooks_info Ontworpen voor verharding
HMAC-SHA256
Elke payload ondertekend met uw geheim. Constant-tijdvergelijking verplicht.
SSRF-bescherming
Privé-/interne IP's, localhost en cloud-metadata-eindpunten geblokkeerd bij abonneren en verzenden.
Veilig tegen DNS-rebinding
IP opnieuw gevalideerd op verzendtijdstip, vastgezet via CURLOPT_RESOLVE.
HTTPS sterk aanbevolen
http en https geaccepteerd. HTTPS aanbevolen voor productie.
Event-ID idempotentie
Elke levering bevat een unieke X-PaperOffice-Event-ID. Dedupliceer aan uw kant.
Volledig audittrail
Alle pogingen gelogd: statuscode, antwoordbody, timing, foutmelding.
Onbeperkte abonnementen, leveringsgedrag volledig configureerbaar
Beschikbaar op alle abonnementen. Pay-per-use: 1 credit per succesvolle levering (HTTP 2xx). Opnieuw proberen, testgebeurtenissen en mislukte leveringen zijn gratis.
Gebeurtenissen ontvangen?
Configureer uw webhooks.