Вебхуки Події в реальному часі
Отримуйте сповіщення в реальному часі про всі події. Документи оброблені, OCR завершено, класифікація виконана.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Довіра провідних компаній по всьому світу
SUPER TRUST
The world’s exclusive sole DMS partner for QNAP and ASUSTOR.
Dedicated landing pages, direct integration, data stays on your NAS.
QNAP
Sole official DMS partner for QNAP NAS — documents stay on your device, AI runs through PaperOffice.
MoreASUSTOR
Sole official DMS partner for ASUSTOR NAS — BYOS, on-premises and full control over where data lives.
More22 типи подій, згруповані за сутністю
Підпишіться на окремі події або використовуйте символ підстановки * для всього.
Документи
14-
document.uploadedНовий документ завантажено до робочого простору -
document.createdПсевдонім для document.uploaded (сумісність) -
document.processedПотік OCR/<a href="/uk/ai-idp-intelektualna-obrobka-dokumentiv/">AI-IDP</a> завершено успішно -
document.editedОновлено метадані, теги або вміст -
document.deletedДокумент переміщено до кошика -
document.restoredДокумент відновлено з кошика -
document.movedДокумент переміщено між робочими просторами -
document.version_createdДодано нову версію до існуючого документа -
document.lifecycle_changedЗмінено статус зберігання / архівування -
document.comment_addedОпубліковано коментар до документа -
document.note_addedДодано внутрішню нотатку -
document.tag_addedДо документа призначено тег -
document.legal_hold_placedАктивовано юридичне блокування (незмінне) -
document.legal_hold_releasedЮридичне блокування знято
Завдання
3-
job.completedАсинхронне завдання успішно завершено -
job.failedАсинхронне завдання остаточно не виконано -
job.progressОновлення прогресу під час тривалих завдань
Workspaces
2-
workspace.sharedWorkspace спільно використано з користувачем або командою -
workspace.unsharedWorkspace доступ скасовано
Задачі
3-
завдання.створеноСтворено нову задачу -
завдання.завершеноЗадачу позначено як виконану -
завдання.простроченоЗадача прострочена
Вебхуки в дії
Дивіться, як працює PaperOffice Webhooks на практиці — у відео.
Кожна доставка дотримується однієї схеми
Передбачуване тіло JSON, п'ять підписаних HTTP-заголовків, мітки часу 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 Завжди JSON, кодування UTF-8 User-Agent PaperOffice-Webhook/1.0 Фіксований ідентифікатор для списків дозволів брандмауера X-PaperOffice-Event document.processed Тип події, що доставляється X-PaperOffice-Event-ID a3b7f9c1… Унікальний ID 128 біт. Використовуйте для ідемпотентності. X-PaperOffice-Subscription-ID 42 ID підписки, що отримує подію X-PaperOffice-Signature sha256=… HMAC-SHA256 необробленого тіла, у шістнадцятковому кодуванні Перевіряйте кожну доставку за допомогою HMAC-SHA256
Обчисліть HMAC-SHA256 для необробленого тіла запиту, використовуючи ваш спільний секрет, а потім порівняйте його з X-PaperOffice-Signature за допомогою порівняння з постійним часом (hash_equals, crypto.timingSafeEqual).
import crypto from 'crypto';
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');
}); Три стратегії повторних спроб, до 10 спроб
Виберіть політику для кожної підписки. Кожна спроба реєструється з кодом статусу, тілом відповіді та часом виконання.
exponential Експоненціальна (за замовчуванням)
Затримка подвоюється після кожної спроби: 30 с, 60 с, 120 с, 240 с, 480 с…
linear Лінійна
Фіксоване зростання: 30 с, 60 с, 90 с, 120 с, 150 с…
none Немає
Відправив і забув. Ніяких повторних спроб навіть при помилках 5xx. Корисно для тестових вебхуків.
9 кінцевих точок під /latest/webhooks/
Повний CRUD для підписок, журналів доставки, одноразових підписок на завдання та тестової кінцевої точки — все через OAuth2 Bearer, готове до MCP.
/webhooks/subscribe Створити нову підписку (необмежена кількість на обліковий запис) po_webhooks_subscribe /webhooks/list Список усіх підписок облікового запису po_webhooks_list /webhooks/update Оновити існуючу підписку po_webhooks_update /webhooks/delete М'яке видалення підписки (журнал доставки зберігається) po_webhooks_delete /webhooks/deliveries Отримати журнал доставки з фільтрами (event_type, success_only) po_webhooks_deliveries /webhooks/test Надіслати подію test.ping для перевірки доставки po_webhooks_test /webhooks/subscribe-job Одноразовий вебхук для конкретного job_id po_webhooks_subscribe_job /webhooks/job-subscriptions Список підписок, обмежених завданням po_webhooks_job_subscriptions /webhooks/info Доступні події, кінцеві точки, політики повторних спроб, інформація про підпис po_webhooks_info Захищено за дизайном
HMAC-SHA256
Кожен корисний навантаження підписано вашим секретом. Порівняння з постійним часом є обов'язковим.
Захист від SSRF
Приватні/внутрішні IP-адреси, localhost та кінцеві точки метаданих хмари заблоковано під час підписки та відправки.
Безпека від DNS-rebinding
IP-адреса повторно перевіряється під час відправки, закріплюється через CURLOPT_RESOLVE.
HTTPS наполегливо рекомендується
Приймаються http та https. HTTPS рекомендується для виробничого середовища.
Ідемпотентність Event-ID
Кожна доставка містить унікальний X-PaperOffice-Event-ID. Виконайте дедуплікацію на своїй стороні.
Повний аудиторський слід
Усі спроби зареєстровано: код статусу, тіло відповіді, час виконання, повідомлення про помилку.
Необмежені підписки, поведінка доставки повністю налаштовується
Доступно на усіх тарифах. Оплата за використання: 1 кредит за успішну доставку (HTTP 2xx). Повторні спроби, тестові події та невдалі доставки безкоштовні.
Отримувати події?
Налаштуйте свої вебхуки.