Webhooks Događaji u realnom vremenu
Povratni pozivi potpisani HMAC-om za svaki događaj dokumenta, posla, radnog prostora i zadatka. 22 tipa događaja, eksponencijalni ponovni pokušaji, preporučuje se HTTPS.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Поверење водећих компанија широм света
22 tipa događaja, grupisano po entitetu
Pretplatite se na pojedinačne događaje ili koristite džoker * za sve.
Dokumenti
14-
dokument.otpremljenNovi dokument otpremljen u radni prostor -
dokument.kreiranAlias za document.uploaded (kompatibilnost) -
dokument.obrađenOCR/IDP pipeline uspešno završen -
dokument.uređenMetapodaci, oznake ili sadržaj ažurirani -
dokument.obrisanDokument premešten u kantu -
dokument.obnovljenDokument oporavljen iz kante -
document.movedDokument premešten između radnih prostora -
dokument.verzija.kreiranaNova verzija dodata postojećem dokumentu -
dokument.životni_ciklus.izmenjenStatus zadržavanja / arhiviranja promenjen -
dokument.komentar.dodatKomentar objavljen na dokumentu -
dokument.beleška.dodataInterna beleška priložena -
dokument.oznaka.dodataOznaka dodeljena dokumentu -
dokument.pravna_mera.stavljenaPravno zadržavanje aktivirano (nepromenljivo) -
dokument.pravna_mera.uklonjenaPravno zadržavanje oslobođeno
Poslovi
3-
zadatak.završenAsinhroni posao uspešno završen -
zadatak.neuspešanAsinhroni posao terminalno neuspešan -
napredak_poslaAžuriranje napretka tokom dugotrajnih poslova
Radni prostori
2-
radni_prostor.deljenoRadni prostor podeljen sa korisnikom ili timom -
radni_prostor.nedeljenoPristup radnom prostoru opozvan
Zadaci
3-
zadatak.kreiranNovi zadatak kreiran -
zadatak.zavrsenZadatak označen kao kompletan -
zadatak.kasniZadatak je prošao svoj rok
Pretplatite se na ["*"] da biste primali svaki događaj vašeg naloga.
Svaka isporuka prati istu šemu
Predvidivo JSON telo, pet potpisanih HTTP zaglavlja, ISO-8601 UTC vremenske oznake.
{
"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 Uvek JSON, UTF-8 kodiran User-Agent PaperOffice-Webhook/1.0 Fiksni identifikator za firewall allowliste X-PaperOffice-Event document.processed Tip događaja koji se isporučuje X-PaperOffice-Event-ID a3b7f9c1… 128-bitni jedinstveni ID. Koristite za idempotentnost. X-PaperOffice-Subscription-ID 42 ID pretplate koja prima događaj X-PaperOffice-Signature sha256=… HMAC-SHA256 sirovog tela, heksadecimalno kodiran Verifikujte svaku isporuku sa HMAC-SHA256
Izračunajte HMAC-SHA256 nad sirovim telom zahteva koristeći vaš zajednički tajni ključ, zatim uporedite sa X-PaperOffice-Signature koristeći poređenje konstantnog vremena (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 ponovnog pokušaja, do 10 pokušaja
Odaberite politiku po pretplati. Svaki pokušaj se beleži sa status kodom, telom odgovora i vremenskim merenjem.
exponential Eksponencijalno (podrazumevano)
Pauza se udvostručuje nakon svakog pokušaja: 30s, 60s, 120s, 240s, 480s…
linear Linearno
Fiksni rast: 30s, 60s, 90s, 120s, 150s…
none Nijedno
Pošalji i zaboravi. Nema ponovnih pokušaja čak ni kod 5xx. Korisno za test hookove.
9 krajnjih tačaka pod /latest/webhooks/
Potpuni CRUD za pretplate, dnevnike isporuke, jednokratne pretplate na poslove i test krajnju tačku — sve sa OAuth2 Bearer, sve spremno za MCP.
/webhooks/subscribe Kreiraj novu pretplatu (neograničeno po nalogu) po_webhooks_subscribe /webhooks/list Ispiši sve pretplate naloga po_webhooks_list /webhooks/update Ažuriraj postojeću pretplatu po_webhooks_update /webhooks/delete Brisanje uz očuvanje podataka (dnevnik isporuke se čuva) po_webhooks_delete /webhooks/deliveries Preuzmi dnevnik isporuke sa filterima (event_type, success_only) po_webhooks_deliveries /webhooks/test Pošalji test.ping događaj za verifikaciju isporuke po_webhooks_test /webhooks/subscribe-job Jednokratni vebhuk za specifični job_id po_webhooks_subscribe_job /webhooks/job-subscriptions Ispiši pretplate vezane za posao po_webhooks_job_subscriptions /webhooks/info Dostupni događaji, krajnje tačke, politike ponovnog pokušaja, informacije o potpisu po_webhooks_info Ojačano po dizajnu
HMAC-SHA256
Svaki teret potpisan vašom tajnom. Obavezno poređenje konstantnog vremena.
SSRF zaštita
Privatne / interne IP adrese, localhost i krajnje tačke metapodataka u oblaku blokirane pri pretplati i slanju.
Bezbedno od DNS rebindinga
IP se ponovo validira u vreme slanja, fiksiran putem CURLOPT_RESOLVE.
HTTPS snažno preferiran
http i https prihvaćeni. HTTPS se preporučuje za produkciju.
Event-ID idempotentnost
Svaka isporuka nosi jedinstveni X-PaperOffice-Event-ID. Deduplikacija na vašoj strani.
Potpuna reviziona staza
Svi pokušaji zabeleženi: status kod, telo odgovora, vreme, poruka o grešci.
Neograničene pretplate, ponašanje isporuke u potpunosti konfigurable
Dostupno na svim planovima. Plaćanje po upotrebi: 1 kredit po uspešnoj isporuci (HTTP 2xx). Ponovni pokušaji, test događaji i neuspele isporuke su besplatni.
Vaš prvi vebhuk za 60 sekundi
Kreiraj krajnju tačku, pretplati se putem API-ja, pokreni test događaj. To je to.