Webhooky Události v reálném čase
Zpětná volání podepsaná HMAC pro každou událost dokumentu, úlohy, pracovního prostoru a úkolu. 22 typů událostí, exponenciální opakování, doporučeno HTTPS.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Důvěra předních společností po celém světě
22 typů událostí, seskupených podle entity
Přihlaste se k odběru jednotlivých událostí nebo použijte zástupný znak * pro vše.
Dokumenty
14-
dokument.nahranýNový dokument nahrán do pracovního prostoru -
dokument.vytvořenAlias pro document.uploaded (kompatibilita) -
dokument.zpracovánPipeline OCR/IDP úspěšně dokončena -
dokument.upravenMetadata, štítky nebo obsah aktualizovány -
dokument.smazánDokument přesunut do koše -
dokument.obnovenDokument obnoven z koše -
document.movedDokument přesunut mezi pracovními prostory -
dokument.verze_vytvořenaNová verze přidána k existujícímu dokumentu -
dokument.cyklus_změněnZměněn stav retence/archivace -
dokument.komentář_přidánKomentář přidaný k dokumentu -
dokument.poznámka_přidánaPřipojena interní poznámka -
dokument.štítek_přidánŠtítek přiřazen dokumentu -
dokument.právní_zápora_uloženaPrávní zádrž aktivována (neměnné) -
dokument.právní_zápora_zrušenaPrávní zádrž uvolněna
Úlohy
3-
úloha.dokončenaAsynchronní úloha úspěšně dokončena -
úloha.selhalaAsynchronní úloha terminálně selhala -
úloha.průběhAktualizace průběhu během dlouho běžících úloh
Pracovní prostory
2-
pracovní_prostor.sdílenPracovní prostor sdílen s uživatelem nebo týmem -
pracovní_prostor.zrušeno_sdíleníPřístup k pracovnímu prostoru odvolán
Úkoly
3-
úkol.vytvořenNový úkol vytvořen -
úkol.dokončenoÚkol označen jako dokončený -
úkol.po_terminuÚkol překročil termín splnění
Přihlaste se k odběru ["*"] pro přijímání každé události vašeho účtu.
Každé doručení následuje stejné schéma
Prediktabilní tělo JSON, pět podepsaných HTTP hlaviček, časová razítka 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ódováno UTF-8 User-Agent PaperOffice-Webhook/1.0 Pevný identifikátor pro allowlisty firewallu X-PaperOffice-Event document.processed Typ doručované události X-PaperOffice-Event-ID a3b7f9c1… 128bitové jedinečné ID. Použijte pro idempotenci. X-PaperOffice-Subscription-ID 42 ID předplatného přijímajícího událost X-PaperOffice-Signature sha256=… HMAC-SHA256 surového těla, hexadecimálně kódováno Ověřte každé doručení pomocí HMAC-SHA256
Vypočítejte HMAC-SHA256 nad surovým tělem požadavku pomocí vašeho sdíleného tajného klíče a poté porovnejte s X-PaperOffice-Signature pomocí porovnání s konstantním časem (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');
}); Tři strategie opakování, až 10 pokusů
Vyberte si zásadu pro každé předplatné. Každý pokus je zaznamenán se stavovým kódem, tělem odpovědi a časováním.
exponential Exponenciální (výchozí)
Back-off se po každém pokusu zdvojnásobí: 30s, 60s, 120s, 240s, 480s…
linear Lineární
Pevný růst: 30s, 60s, 90s, 120s, 150s…
none Žádné
Fire-and-forget. Žádná opakování ani při chybách 5xx. Užitečné pro testovací hooky.
9 koncových bodů pod /latest/webhooks/
Plné CRUD pro předplatná, protokoly doručení, jednorázová předplatná úloh a testovací koncový bod — vše OAuth2 Bearer, vše připraveno pro MCP.
/webhooks/subscribe Vytvořit nové předplatné (neomezeně na účet) po_webhooks_subscribe /webhooks/list Vypsat všechna předplatná účtu po_webhooks_list /webhooks/update Aktualizovat existující předplatné po_webhooks_update /webhooks/delete Mazat předplatné soft-delete (protokol doručení zachován) po_webhooks_delete /webhooks/deliveries Načíst protokol doručení s filtry (event_type, success_only) po_webhooks_deliveries /webhooks/test Odeslat událost test.ping pro ověření doručení po_webhooks_test /webhooks/subscribe-job Jednorázový webhook pro specifické job_id po_webhooks_subscribe_job /webhooks/job-subscriptions Vypsat předplatná scopedovaná podle úloh po_webhooks_job_subscriptions /webhooks/info Dostupné události, koncové body, zásady opakování, informace o podpisu po_webhooks_info Hardened by design (Zabezpečeno již návrhem)
HMAC-SHA256
Každá datová část podepsána vaším tajným klíčem. Porovnání s konstantním časem je povinné.
Ochrana proti SSRF
Soukromé/interní IP adresy, localhost a koncové body metadat cloudu blokovány při přihlášení i odeslání.
Bezpečné proti DNS rebindingu
IP znovu ověřena v čase odeslání, připnuta přes CURLOPT_RESOLVE.
HTTPS silně preferováno
http i https přijato. HTTPS doporučeno pro produkci.
Idempotence Event-ID
Každé doručení nese jedinečné X-PaperOffice-Event-ID. Deduplikujte na své straně.
Úplný auditní záznam
Všechny pokusy zaznamenány: stavový kód, tělo odpovědi, časování, chybová zpráva.
Neomezená předplatná, chování doručení plně konfigurovatelné
Dostupné na všech plánech. Platba za použití: 1 kredit za úspěšné doručení (HTTP 2xx). Opakování, testovací události a neúspěšná doručení jsou zdarma.
Váš první webhook za 60 sekund
Vytvořte koncový bod, přihlaste se k odběru přes API, spusťte testovací událost. To je vše.