웹훅 실시간 이벤트
모든 문서, 작업, 워크스페이스 및 작업 이벤트에 대한 HMAC 서명 콜백. 22 가지 이벤트 유형, 지수 재시도, HTTPS 권장.
{
"event_type": "document.processed",
"event_id": "a3b7f9c1d4e8b2a6",
"timestamp": "2026-04-17T14:23:11Z",
"subscription_id": 42,
"data": { "pofid": "doc_01HZY8K3…" }
} 엔티티별로 그룹화된 22 가지 이벤트 유형
개별 이벤트를 구독하거나 모든 것을 위한 와일드카드 * 를 사용하세요.
문서
14-
document.uploaded워크스페이스에 새 문서 업로드됨 -
문서 생성됨document.uploaded 의 별칭 (호환성) -
문서 처리됨OCR/IDP 파이프라인이 성공적으로 완료됨 -
문서 수정됨메타데이터, 태그 또는 콘텐츠 업데이트됨 -
문서 삭제됨문서가 휴지통으로 이동됨 -
문서 복원됨문서가 휴지통에서 복구됨 -
document.moved문서가 워크스페이스 간에 이동됨 -
문서 버전 생성됨기존 문서에 새 버전 추가됨 -
문서 라이프사이클 변경됨보유/보관 상태 변경됨 -
문서 댓글 추가됨문서에 댓글 게시됨 -
문서 메모 추가됨내부 메모 첨부됨 -
문서 태그 추가됨문서에 태그 할당됨 -
문서 법적 보유 조치됨법적 보유 활성화 (변경 불가) -
문서 법적 보유 해제됨법적 보유 해제됨
작업
3-
작업 완료됨비동기 작업이 성공적으로 완료됨 -
작업 실패함비동기 작업이 최종적으로 실패함 -
작업 진행 중장기 실행 작업 중 진행률 업데이트
워크스페이스
2-
워크스페이스 공유됨워크스페이스가 사용자 또는 팀과 공유됨 -
워크스페이스 공유 해제됨워크스페이스 액세스 취소됨
작업
3-
작업 생성됨새 작업 생성됨 -
작업 완료됨작업이 완료로 표시됨 -
작업 기한 초과됨작업이 마감일을 지남
["*"] 를 구독하여 계정의 모든 이벤트를 수신하세요.
모든 배달은 동일한 스키마를 따릅니다
예측 가능한 JSON 본문, 5 개의 서명된 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… 128 비트 고유 ID. 멱등성에 사용하세요. X-PaperOffice-Subscription-ID 42 이벤트를 수신하는 구독의 ID X-PaperOffice-Signature sha256=… 원본 본문의 HMAC-SHA256, 16 진수 인코딩 모든 배달을 HMAC-SHA256 으로 검증하세요
공유 비밀 키를 사용하여 원본 요청 본문에 대해 HMAC-SHA256 을 계산한 후, 상수 시간 비교 (hash_equals, crypto.timingSafeEqual) 를 사용하여 X-PaperOffice-Signature 와 비교하십시오.
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');
}); 최대 10 회 시도 가능한 3 가지 재시도 전략
구독별 정책을 선택하십시오. 모든 시도는 상태 코드, 응답 본문 및 타이밍과 함께 기록됩니다.
exponential 지수적 (기본값)
각 시도 후 대기 시간이 두 배로 증가합니다: 30 초, 60 초, 120 초, 240 초, 480 초…
linear 선형
고정 증가: 30 초, 60 초, 90 초, 120 초, 150 초…
none 없음
발송 후 망각. 5xx 오류 발생 시에도 재시도하지 않습니다. 테스트 훅에 유용합니다.
/latest/webhooks/ 아래의 9 개 엔드포인트
구독, 배달 로그, 일회성 작업 구독 및 테스트 엔드포인트에 대한 전체 CRUD — 모두 OAuth2 베어러 토큰 인증 및 MCP 준비 완료.
/webhooks/subscribe 새 구독 생성 (계정당 무제한) po_webhooks_subscribe /webhooks/list 계정의 모든 구독 나열 po_webhooks_list /webhooks/update 기존 구독 업데이트 po_webhooks_update /webhooks/delete 구독 소프트 삭제 (배달 로그 보존) po_webhooks_delete /webhooks/deliveries 필터 (이벤트 유형, 성공만) 와 함께 배달 로그 검색 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, 로컬호스트 및 클라우드 메타데이터 엔드포인트 차단.
DNS 리바인딩 안전
발송 시점에 IP 재검증, CURLOPT_RESOLVE 로 고정.
HTTPS 강력 권장
http 및 https 허용. 프로덕션 환경에서는 HTTPS 권장.
이벤트 ID 멱등성
모든 배달에 고유한 X-PaperOffice-Event-ID 포함. 사용자 측에서 중복 제거 필요.
전체 감사 추적
모든 시도 기록: 상태 코드, 응답 본문, 타이밍, 오류 메시지.
무제한 구독, 배달 동작 완전 구성 가능
모든 요금제 에서 이용 가능. 사용량 과금: 성공한 배달당 1 크레딧 (HTTP 2xx). 재시도, 테스트 이벤트 및 실패한 배달은 무료입니다.
60 초 만에 첫 웹훅 만들기
엔드포인트 생성, API 를 통해 구독, 테스트 이벤트 발송. 그것으로 끝입니다.