Skip to main content

Webhook Dispatcher — Sync Contract

Status: populated Owner: Platform Engineering Last updated: 2026-04-18 Companion: API_CONTRACTS · EVENT_SCHEMAS

1. Upstream Dependencies

dlr-processor → webhook.dispatch

AspectDetail
Ownerdlr-processor team
Schema version1.0
Stability guaranteeAdditive changes without notice; breaking changes = 30-day parallel publish
Required fieldseventId, accountId, messageId, dlrStatus, to, operatorId, occurredAt
Webhook Dispatcher commitmentTolerant reader; ignores unknown fields; logs schema version mismatch

auth-service / Kong — JWT validation

AspectDetail
Ownerauth-service team
ContractKong injects X-Account-Id header after JWT validation
Breaking changeHeader name change requires coordinated deployment

KMS (secret encryption)

AspectDetail
OwnerCloud Platform team
ContractGenerateDataKey + Decrypt API for envelope encryption
Availability99.99% SLA; brief unavailability handled by in-memory secret cache (5 min TTL)

2. Downstream Dependencies

Customer webhook endpoints (external)

AspectDetail
ContractCustomer commits to: HTTPS endpoint, 2xx on receipt, idempotency on X-Ghasi-Delivery-Id
Ghasi commitmentSame deliveryId used on all retries of same event; customer can use this for dedup
Signature verificationDocumented in customer integration guide

3. Schema Change Protocol

Same as platform-wide protocol:

  1. Additive change: deploy producer first, no consumer coordination required.
  2. Breaking change: new versioned subject (webhook.dispatch.v2), parallel publish 30 days minimum.
  3. Emergency: 48-hour minimum notice; rollback plan required.

4. REST API Versioning

The REST API is versioned via path prefix (/v1/). Minor/patch changes (additive fields) are non-breaking. New major version (/v2/) required for breaking changes. Old version deprecated with 90-day sunset notice.