Document Intelligence · Webhooks
See Webhooks (global) → for signing, retry, and idempotency.
Event catalog
| Event | Fires when | data keys |
|---|---|---|
document.uploaded | A file is accepted into the queue | documentId · type · filename · sha256 · externalRef |
document.classified | Auto-classify finished (skipped if type hint was given) | documentId · type · classificationConfidence |
document.extracted | Extraction succeeded (status extracted) | documentId · extractionId · type · confidenceScore · fields |
document.requires_review | Confidence below org threshold | documentId · extractionId · confidenceScore · flags |
document.password_required | Encrypted PDF without (or with wrong) password | documentId · errorMessage |
document.failed | Hard failure (corrupt file, model error, etc.) | documentId · errorMessage · stage |
extraction.corrected | Analyst submitted a manual correction | documentId · extractionId · actorUserId · previousExtractionId |
template.matched | Auto-classify matched a custom template | documentId · templateId · matchConfidence |
Signature
Document Intelligence currently uses the X-QEDI-Signature header (legacy product-prefixed). Same scheme as global — sha256=<hex of HMAC-SHA256(secret, raw_body)>.
X-QEDI-Event: document.extracted
X-QEDI-Delivery: whd_01HXY...
X-QEDI-Signature: sha256=8b2c4d7e...
X-QEDI-Timestamp: 1716552000
X-QEDI-Attempt: 1Example: document.extracted
{
"id": "evt_01HXY...",
"event": "document.extracted",
"occurredAt": "2026-05-24T08:14:22.481Z",
"orgId": "org_01HXY...",
"data": {
"documentId": "doc_01HXY...",
"extractionId": "ext_01HXY...",
"type": "npwp",
"confidenceScore": 94,
"fields": {
"npwp_number": "12.345.678.9-012.000",
"name": "BUDI SANTOSO",
"address": "JL. SUDIRMAN KAV. 1, JAKARTA SELATAN",
"registered_at": "2018-04-15"
}
}
}Most integrations subscribe just to document.extracted + document.requires_review + document.failed and ignore the intermediate states.
Register
POST
/api/webhooks{
"url": "https://your-app.example.com/webhooks/quantum-di",
"events": ["document.extracted", "document.requires_review", "document.failed"]
}Response includes secret (shown once):
{
"data": {
"webhook": {
"id": "whk_01HXY...",
"url": "...",
"events": [...],
"secret": "qe_whsec_..."
}
}
}Delivery SLO
- Up to 5 attempts with exponential backoff
- 10-second HTTP timeout per attempt
- Delivery statuses:
pending·delivered·failed·dropped
Query delivery history from the dashboard's Webhooks page, or via GET /api/webhooks/{id}/deliveries (paginated, last 200).