📘 Public beta · Endpoints are stable; OpenAPI specs and SDKs ship monthly. See changelog →
Products
Document Intelligence
Webhooks

Document Intelligence · Webhooks

See Webhooks (global) → for signing, retry, and idempotency.

Event catalog

EventFires whendata keys
document.uploadedA file is accepted into the queuedocumentId · type · filename · sha256 · externalRef
document.classifiedAuto-classify finished (skipped if type hint was given)documentId · type · classificationConfidence
document.extractedExtraction succeeded (status extracted)documentId · extractionId · type · confidenceScore · fields
document.requires_reviewConfidence below org thresholddocumentId · extractionId · confidenceScore · flags
document.password_requiredEncrypted PDF without (or with wrong) passworddocumentId · errorMessage
document.failedHard failure (corrupt file, model error, etc.)documentId · errorMessage · stage
extraction.correctedAnalyst submitted a manual correctiondocumentId · extractionId · actorUserId · previousExtractionId
template.matchedAuto-classify matched a custom templatedocumentId · 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:   1

Example: 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
Auth · API keyScope · webhooks:manage
{
  "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).