Skip to main content

Webhooks

Docpier POSTs to your HTTPS URL when async work finishes. You do not POST to Docpier for this. Return 2xx immediately, then process. Delivery is at-least-once — persist webhookId.

Route on product, then event. Per-item results are on GET, not in this envelope.

Envelope

Docpier sends JSON. Comments below are documentation only — they are not on the wire.

{
"product": "docmind", // "docmind" | "docbooks"
"event": "PROCESSING_FINALISED", // uppercase snake_case — see tables
"occurred": "2026-08-15T16:02:11.000Z", // ISO 8601
"webhookId": "01J7QK3N8X4M2P9C7R1T", // ULID per attempt — dedupe key
"retryCount": 0, // 0 on first try
"workspaceId": "01HWORKSPACE0000000001", // that product's workspace
"documentId": "01HDOCUMENT00000000001", // Docmind extract jobs
"extRef": "INV-1042", // your id, if you sent one
"filename": "invoice.pdf",
"status": "COMPLETED",
"message": null // optional human text on failure
}

Docbooks booking events use the same envelope with booking identifiers (bookingJobId, Docbooks workspaceId) instead of documentId. Extra field names follow the 0.2.0 domain contract.

Docmind events

EventYour next call
PROCESSING_FINALISEDGET the document
PROCESSING_FAILEDDomain failure — do not retry the extract blindly
FEEDBACK_RECEIVEDOptional; HTTP 200 already had per-item status

Split: webhook on the parent only.

Docbooks events

EventYour next call
BOOKING_FINALISEDGET the booking job
ONBOARDING_FINALISEDGET the onboarding job
OFFBOARDING_FINALISEDGET the offboarding job

Split booking: parent job only.

Delivery

10 attempts, exponential backoff, 24 hours. 10 s timeout. Production HTTPS (TLS 1.2+). Do not 4xx for application errors you cannot fix with a retry — acknowledge, then reconcile via GET.

Auth on your URL (configured by Docpier): none (dev), Basic, or Bearer. Email support@docpier.com with URL, scheme, and workspace or partner id.