Skip to main content

Webhook Delivery API Guide

The Zen Mesh webhook delivery API receives, validates, and delivers webhook events from external sources to your private network destinations.

Endpoints​

See the Back API Reference for the full endpoint list and schema.

Delivery Flow​

  1. Ingest: Webhook received at the ingress endpoint
  2. Validate: HMAC signature, header validation, IP allowlisting
  3. Filter: Rule-based filtering by event type, source, or headers
  4. Deliver: Fan-out to one or more destinations with configurable retry
  5. Track: Each delivery is recorded with status, attempts, and timing

At-Least-Once Delivery​

Zen Mesh retries failed deliveries with exponential backoff. Unrecoverable failures are routed to the dead-letter queue (DLQ) for replay.

Idempotent Delivery​

Consumers should handle duplicate deliveries idempotently using the X-Zen-Delivery-Idempotency-Key header. See Idempotency.

Event Types​

Webhook events carry a type field. Supported sources include:

  • Stripe (checkout.session.completed, invoice.paid, ...)
  • GitHub (push, pull_request, issues, ...)
  • Custom (any JSON payload via API)

Operational Limits​

  • Payload size: 256 KB max (configurable)
  • Retry count: 5 attempts with exponential backoff
  • DLQ retention: 7 days (configurable)
  • Rate limit: 100 req/min per tenant (burst 200)

Delivery Status​

Each delivery progresses through a state machine:

StatusDescription
pendingQueued for delivery
deliveringCurrently in flight
deliveredSuccessfully delivered
failedDelivery failed, queued for retry
exhaustedAll retries exhausted, moved to DLQ
replayingRe-queued from DLQ for retry

Inspect delivery status:

curl -H "Authorization: Bearer $ZEN_API_KEY" \
-H "X-Tenant-ID: $ZEN_TENANT_ID" \
https://api.zen-mesh.io/v1/deliveries/dlv_abc123

Delivery Attempts History​

curl -H "Authorization: Bearer $ZEN_API_KEY" \
-H "X-Tenant-ID: $ZEN_TENANT_ID" \
https://api.zen-mesh.io/v1/deliveries/dlv_abc123/attempts

Each attempt includes HTTP status, response body (truncated), timestamp, and duration.

Dead-Letter Queue​

When all retry attempts are exhausted, the event moves to the dead-letter queue:

curl -H "Authorization: Bearer $ZEN_API_KEY" \
-H "X-Tenant-ID: $ZEN_TENANT_ID" \
https://api.zen-mesh.io/v1/deliveries?status=exhausted&limit=20

DLQ items can be replayed manually via the Replay API.