Webhooki Dogodki v realnem času
Povratni klici, podpisani s HMAC, za vsak dogodek dokumenta, opravila, delovnega prostora in naloge. 22 vrst dogodkov, eksponentni ponovni poskusi, priporočljiv HTTPS.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} 22 vrst dogodkov, združenih po entiteti
Naročite se na posamezne dogodke ali uporabite nadomestni znak * za vse.
Dokumenti
14-
dokument.naloženNov dokument naložen v delovni prostor -
dokument.ustvarjenVzdevek za document.uploaded (združljivost) -
dokument.obdelanCevovod OCR/IDP uspešno zaključen -
dokument.urejenPosodobljeni metapodatki, oznake ali vsebina -
dokument.izbrisanDokument premaknjen v smeti -
dokument.obnovljenDokument obnovljen iz smeti -
document.movedDokument premaknjen med delovnimi prostori -
dokument.različica_ustvarjenaNova različica dodana obstoječemu dokumentu -
dokument.zivljenjski_cikel_spremenjenSpremenjen status hrambe/arhiviranja -
dokument.komentar_dodanKomentar objavljen na dokumentu -
dokument.opomba_dodanaPriložena interna opomba -
dokument.oznaka_dodanaDokumentu dodeljena oznaka -
dokument.pravna_zadrzba_postavljenaAktivirana pravna zaščita (nespremenljivo) -
dokument.pravna_zadrzba_odstranjenaPravna zaščita sproščena
Opravila
3-
proces.dokončanAsinhrono opravilo uspešno zaključeno -
proces.neuspešenAsinhrono opravilo trajno spodletelo -
proces.potekPosodobitev napredka med dolgotrajnimi opravili
Delovni prostori
2-
delovni_prostor.deljenDelovni prostor v skupni rabi z uporabnikom ali ekipo -
delovni_prostor.nedeljenDostop do delovnega prostora preklican
Naloge
3-
opravilo.ustvarjenoUstvarjena nova naloga -
opravilo.dokončanoNaloga označena kot zaključena -
opravilo.precasnjenoNaloga je presegla rok
Naročite se na ["*"], da prejmete vsak dogodek vašega računa.
Vsaka dostava sledi isti shemi
Predvidljivo JSON telo, pet podpisanih HTTP glav, časovni žigi ISO-8601 UTC.
{
"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 Vedno JSON, kodirano v UTF-8 User-Agent PaperOffice-Webhook/1.0 Fiksni identifikator za dovoljenja požarnega zidu X-PaperOffice-Event document.processed Vrsta dogodka, ki se dostavlja X-PaperOffice-Event-ID a3b7f9c1… 128-bitni edinstveni ID. Uporabite za idempotentnost. X-PaperOffice-Subscription-ID 42 ID naročnine, ki prejme dogodek X-PaperOffice-Signature sha256=… HMAC-SHA256 surovega telesa, kodirano v šestnajstiškem zapisu Preverite vsako dostavo s HMAC-SHA256
Izračunajte HMAC-SHA256 nad surovim telom zahteve z uporabo vašega skupnega skrivnega ključa, nato pa ga primerjajte z X-PaperOffice-Signature z uporabo primerjave s stalnim časom (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');
}); Tri strategije ponovnih poskusov, do 10 poskusov
Izberite pravilnik za vsako naročnino. Vsak poskus je zabeležen s kodo stanja, telom odgovora in časom.
exponential Eksponentno (privzeto)
Nazadovanje se podvoji po vsakem poskusu: 30 s, 60 s, 120 s, 240 s, 480 s…
linear Linearno
Fiksna rast: 30 s, 60 s, 90 s, 120 s, 150 s…
none Brez
Pošlji in pozabi. Brez ponovnih poskusov tudi pri napakah 5xx. Uporabno za testne webhooke.
9 končnih točk pod /latest/webhooks/
Popoln CRUD za naročnine, dnevnike dostave, enkratne naročnine za opravila in testno končno točko — vse z OAuth2 Bearer, vse pripravljeno za MCP.
/webhooks/subscribe Ustvari novo naročnino (neomejeno na račun) po_webhooks_subscribe /webhooks/list Izpiši vse naročnine računa po_webhooks_list /webhooks/update Posodobi obstoječo naročnino po_webhooks_update /webhooks/delete Mehko brisanje naročnine (dnevnik dostave ohranjen) po_webhooks_delete /webhooks/deliveries Pridobi dnevnik dostave s filtri (event_type, success_only) po_webhooks_deliveries /webhooks/test Pošlji dogodek test.ping za preverjanje dostave po_webhooks_test /webhooks/subscribe-job Enkratni webhook za določen job_id po_webhooks_subscribe_job /webhooks/job-subscriptions Izpiši naročnine, omejene na opravila po_webhooks_job_subscriptions /webhooks/info Razpoložljivi dogodki, končne točke, pravilniki ponovnih poskusov, informacije o podpisu po_webhooks_info Zasnovano z okrepljeno varnostjo
HMAC-SHA256
Vsak tovor podpisan z vašim skrivnim ključem. Primerjava s stalnim časom je obvezna.
Zaščita pred SSRF
Zasebni/interni IP-ji, localhost in končne točke metapodatkov v oblaku so blokirani ob naročanju in odpošiljanju.
Varno pred ponovnim vezavanjem DNS
IP ponovno preverjen ob času odpošiljanja, pripet preko CURLOPT_RESOLVE.
HTTPS močno priporočljiv
Sprejeta http in https. Za proizvodno okolje priporočljiv HTTPS.
Idempotentnost Event-ID
Vsaka dostava vsebuje edinstven X-PaperOffice-Event-ID. Odstranite dvojnike na svoji strani.
Popolna revizijska sled
Vsi poskusi zabeleženi: koda stanja, telo odgovora, čas, sporočilo o napaki.
Neomejene naročnine, vedenje dostave popolnoma konfigurabilno
Na voljo na vseh paketih. Plačilo po uporabi: 1 kredit na uspešno dostavo (HTTP 2xx). Ponovni poskusi, testni dogodki in spodletele dostave so brezplačni.
Vaš prvi webhook v 60 sekundah
Ustvarite končno točko, naročite se preko API-ja, sprožite testni dogodek. To je vse.