Web Kancaları Gerçek zamanlı olaylar
Her belge, iş, çalışma alanı ve görev olayı için HMAC imzalı geri çağrılar. 22 olay türü, üstel yeniden denemeler, HTTPS önerilir.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} Varlığa göre gruplandırılmış 22 olay türü
Bireysel olaylara abone olun veya her şey için * joker karakterini kullanın.
Belgeler
14-
belge.yüklendiBir çalışma alanına yeni belge yüklendi -
belge.oluşturuldudocument.uploaded için takma ad (uyumluluk) -
belge.işlendiOCR/IDP işlem hattı başarıyla tamamlandı -
belge.düzenlendiMeta veriler, etiketler veya içerik güncellendi -
belge.silindiBelge çöpe taşındı -
belge.geri_yüklendiBelge çöpten geri yüklendi -
document.movedBelge çalışma alanları arasında taşındı -
belge.sürüm_oluşturulduMevcut bir belgeye yeni sürüm eklendi -
belge.yaşam_döngüsü_değiştiSaklama / arşivleme durumu değiştirildi -
belge.yorum_eklendiBir belgeye yorum yapıldı -
belge.not_eklendiDahili not eklendi -
belge.etiket_eklendiBir belgeye etiket atandı -
belge.yasal_saklama_uygulandiYasal saklama aktif edildi (değiştirilemez) -
belge.yasal_saklama_kaldirildiYasal saklama serbest bırakıldı
İşler
3-
is_tamamlandiAsenkron iş başarıyla tamamlandı -
is_basarisiz_olduAsenkron iş kalıcı olarak başarısız oldu -
is_ilerlemeUzun süren işler sırasında ilerleme güncellemesi
Çalışma Alanları
2-
calisma_alani_paylasildiÇalışma alanı bir kullanıcı veya ekiple paylaşıldı -
calisma_alani_paylasim_kaldirildiÇalışma alanı erişimi iptal edildi
Görevler
3-
gorev_olusturulduYeni görev oluşturuldu -
gorev_tamamlandiGörev tamamlandı olarak işaretlendi -
gorev_suresi_astiGörev son tarihini geçti
Hesabınızdaki her olayı almak için ["*"] değerine abone olun.
Her teslimat aynı şemayı izler
Öngörülebilir JSON gövdesi, beş imzalı HTTP başlığı, ISO-8601 UTC zaman damgaları.
{
"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 Her zaman JSON, UTF-8 kodlanmış User-Agent PaperOffice-Webhook/1.0 Güvenlik duvarı izin listeleri için sabit tanımlayıcı X-PaperOffice-Event belge.islendi Teslim edilen olay türü X-PaperOffice-Event-ID a3b7f9c1… 128-bit benzersiz kimlik. Tekrarlamazlık için kullanın. X-PaperOffice-Subscription-ID 42 Olayı alan aboneliğin kimliği X-PaperOffice-Signature sha256=… Ham gövdenin HMAC-SHA256'sı, onaltılık kodlu Her teslimatı HMAC-SHA256 ile doğrulayın
Paylaşılan gizli anahtarınızı kullanarak ham istek gövdesi üzerinde HMAC-SHA256 hesaplayın, ardından sabit zamanlı karşılaştırma (hash_equals, crypto.timingSafeEqual) kullanarak X-PaperOffice-Signature ile karşılaştırın.
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');
}); Üç yeniden deneme stratejisi, en fazla 10 deneme
Abonelik başına bir politika seçin. Her deneme durum kodu, yanıt gövdesi ve zamanlaması ile kaydedilir.
exponential Üstel (varsayılan)
Her denemeden sonra geri çekilme iki katına çıkar: 30sn, 60sn, 120sn, 240sn, 480sn…
linear Doğrusal
Sabit büyüme: 30sn, 60sn, 90sn, 120sn, 150sn…
none Yok
Ateşle ve unut. 5xx hatalarında bile yeniden deneme yok. Test kancaları için kullanışlıdır.
/latest/webhooks/ altında 9 uç nokta
Abonelikler, teslimat günlükleri, tek seferlik iş abonelikleri ve bir test uç noktası için tam CRUD — hepsi OAuth2 Bearer, hepsi MCP hazır.
/webhooks/subscribe Yeni bir abonelik oluştur (hesap başına sınırsız) po_webhooks_subscribe /webhooks/list Hesabın tüm aboneliklerini listele po_webhooks_list /webhooks/update Mevcut bir aboneliği güncelle po_webhooks_update /webhooks/delete Bir aboneliği yumuşak sil (teslimat günlüğü korunur) po_webhooks_delete /webhooks/deliveries Filtrelerle teslimat günlüğünü getir (event_type, success_only) po_webhooks_deliveries /webhooks/test Teslimatı doğrulamak için bir test.ping olayı gönder po_webhooks_test /webhooks/subscribe-job Belirli bir job_id için tek seferlik webhook po_webhooks_subscribe_job /webhooks/job-subscriptions İş kapsamındaki abonelikleri listele po_webhooks_job_subscriptions /webhooks/info Mevcut olaylar, uç noktalar, yeniden deneme politikaları, imza bilgileri po_webhooks_info Tasarım gereği güçlendirilmiş
HMAC-SHA256
Her yük gizli anahtarınızla imzalanır. Sabit zamanlı karşılaştırma zorunludur.
SSRF koruması
Özel / dahili IP'ler, localhost ve bulut meta veri uç noktaları abonelik ve gönderim sırasında engellenir.
DNS yeniden bağlamaya karşı güvenli
IP, gönderim sırasında yeniden doğrulanır, CURLOPT_RESOLVE ile sabitlenir.
HTTPS şiddetle tercih edilir
http ve https kabul edilir. Üretim için HTTPS önerilir.
Olay-ID tekrarlamazlığı
Her teslimat benzersiz bir X-PaperOffice-Event-ID taşır. Tarafınızda yinelenenleri çıkarın.
Tam denetim izi
Tüm denemeler kaydedilir: durum kodu, yanıt gövdesi, zamanlama, hata mesajı.
Sınırsız abonelik, teslimat davranışı tamamen yapılandırılabilir
Tüm planlarda mevcuttur. Kullanım başına ödeme: Başarılı her teslimat için 1 kredi (HTTP 2xx). Yeniden denemeler, test olayları ve başarısız teslimatlar ücretsizdir.
İlk webhook'unuz 60 saniye içinde
Bir uç nokta oluşturun, API üzerinden abone olun, bir test olayı tetikleyin. Hepsi bu.