Webhooky Udalosti v reálnom čase
Spätné volania podpísané HMAC pre každú udalosť dokumentu, úlohy, pracovného priestoru a tasku. 22 typov udalostí, exponenciálne opakovania, odporúča sa HTTPS.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Dôvera vedúcich spoločností po celom svete
22 typov udalostí, zoskupených podľa entity
Prihláste sa na odber jednotlivých udalostí alebo použite zástupný symbol * pre všetko.
Dokumenty
14-
dokument.nahranýNový dokument nahraný do pracovného priestoru -
dokument.vytvorenýAlias pre document.uploaded (kompatibilita) -
dokument.spracovanýPipeline OCR/IDP úspešne dokončená -
dokument.upravenýMetadáta, tagy alebo obsah aktualizované -
dokument.odstránenýDokument presunutý do koša -
dokument.obnovenýDokument obnovený z koša -
document.movedDokument presunutý medzi pracovnými priestormi -
dokument.verzia_vytvorenáNová verzia pridaná k existujúcemu dokumentu -
dokument.zmena_životného_cykluZmenený stav retencie/archivácie -
dokument.pridaný_komentárKomentár pridaný k dokumentu -
dokument.pridaná_poznámkaPripojená interná poznámka -
dokument.pridaný_štítokTag priradený k dokumentu -
dokument.právna_zádrž_umiestnenáPrávny zákaz aktivovaný (nemenný) -
dokument.právna_zádrž_zrušenáPrávny zákaz zrušený
Úlohy
3-
úloha.dokončenáAsynchrónna úloha úspešne dokončená -
úloha.zlyhalaAsynchrónna úloha terminálne zlyhala -
úloha.prebiehaAktualizácia priebehu počas dlho bežiacich úloh
Pracovné priestory
2-
pracovný_priestor.zdieľanýPracovný priestor zdieľaný s používateľom alebo tímom -
pracovný_priestor.zdieľanie_zrušenéPrístup k pracovnému priestoru zrušený
Tasky
3-
úloha.vytvorenáVytvorený nový task -
úloha.dokončenáTask označený ako dokončený -
úloha.meškajúcaTask prekročil termín splnenia
Prihláste sa na odber ["*"] na prijímanie každej udalosti vášho účtu.
Každé doručenie nasleduje rovnakú schému
Predvídateľné JSON telo, päť podpísaných HTTP hlavičiek, časové pečiatky 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 Vždy JSON, kódované UTF-8 User-Agent PaperOffice-Webhook/1.0 Pevný identifikátor pre povoľovacie zoznamy firewallu X-PaperOffice-Event spracovanie dokumentu Typ doručovanej udalosti X-PaperOffice-Event-ID a3b7f9c1… 128-bitové jedinečné ID. Použite na idempotenciu. X-PaperOffice-Subscription-ID 42 ID odberu, ktorý prijíma udalosť X-PaperOffice-Signature sha256=… HMAC-SHA256 zo surového tela, kódované hexadecimálne Overte každé doručenie pomocou HMAC-SHA256
Vypočítajte HMAC-SHA256 nad surovým telom požiadavky pomocou vášho zdieľaného tajomstva, potom porovnajte s X-PaperOffice-Signature pomocou porovnania s konštantným č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 stratégie opakovania, až 10 pokusov
Vyberte politiku pre každý odber. Každý pokus je zaznamenaný so status kódom, telom odpovede a časovaním.
exponential Exponenciálne (predvolené)
Back-off sa zdvojnásobí po každom pokuse: 30s, 60s, 120s, 240s, 480s…
linear Lineárne
Pevný rast: 30s, 60s, 90s, 120s, 150s…
none Žiadne
Fire-and-forget. Žiadne opakovania ani pri chybe 5xx. Užitočné pre testovacie hooky.
9 koncových bodov pod /latest/webhooks/
Plné CRUD pre odbery, záznamy doručenia, jednorazové odbery úloh a testovací koncový bod — všetko OAuth2 Bearer, všetko pripravené pre MCP.
/webhooks/subscribe Vytvoriť nový odber (neobmedzený na účet) po_webhooks_subscribe /webhooks/list Zoznam všetkých odberov účtu po_webhooks_list /webhooks/update Aktualizovať existujúci odber po_webhooks_update /webhooks/delete Mäkké vymazanie odberu (záznam doručenia zachovaný) po_webhooks_delete /webhooks/deliveries Načítať záznam doručenia s filtrami (event_type, success_only) po_webhooks_deliveries /webhooks/test Odoslať udalosť test.ping na overenie doručenia po_webhooks_test /webhooks/subscribe-job Jednorazový webhook pre konkrétne job_id po_webhooks_subscribe_job /webhooks/job-subscriptions Zoznam odberov viazaných na úlohu po_webhooks_job_subscriptions /webhooks/info Dostupné udalosti, koncové body, politiky opakovania, informácie o podpise po_webhooks_info Zosilnené dizajnom
HMAC-SHA256
Každý payload podpísaný vaším tajomstvom. Porovnanie s konštantným časom je povinné.
Ochrana proti SSRF
Súkromné/interné IP adresy, localhost a koncové body metadát cloudu blokované pri odbere aj dispatchi.
Bezpečné proti DNS rebindingu
IP znovu overená v čase dispatchu, pripnutá cez CURLOPT_RESOLVE.
HTTPS dôrazne preferované
http aj https akceptované. HTTPS odporúčané pre produkciu.
Idempotencia Event-ID
Každé doručenie nesie jedinečné X-PaperOffice-Event-ID. Odstraňujte duplicity na vašej strane.
Úplný auditný záznam
Všetky pokusy zaznamenané: status kód, telo odpovede, časovanie, chybová správa.
Neobmedzené odbery, správanie doručenia plne konfigurovateľné
Dostupné na všetkých plánoch. Platba podľa použitia: 1 kredit za úspešné doručenie (HTTP 2xx). Opakovania, testovacie udalosti a zlyhané doručenia sú zdarma.
Váš prvý webhook za 60 sekúnd
Vytvorte koncový bod, prihláste sa na odber cez API, spustite testovaciu udalosť. To je všetko.