Features
The whole gateway, stated the way it's actually built.
billing.subscription.created → app.sample/hooks
Every delivery runs the same path — signed, transformed, attempted, logged — and each attempt stays in the immutable log, including the ones that failed.
POST /v1/events — the raw body is signed with HMAC-SHA256 using this endpoint’s secret.
This endpoint’s pipeline renames, filters and enriches fields before delivery.
The receiver returned an error, so the delivery is retried with exponential backoff and full jitter.
The retry succeeds. Both attempts remain in the log, and the delivery can still be replayed.
Outbound dispatch
POST /v1/events fans out to every matching active endpoint. Each delivery is attempted immediately; failures are retried by the worker with exponential backoff and full jitter.
HMAC signing
Every outbound delivery is signed (SHA-256 HMAC of the raw body) with per-endpoint secrets; receivers verify with standard headers.
Dead-letter queue
Deliveries that exhaust retries — or fail non-retryably (bad 4xx) — park in the DLQ with full attempt history. Replay any of them from a clean slate.
Inbound gateway
Register Stripe, GitHub, or generic sources. Inbound webhooks are signature-verified, normalized to prefixed event types (e.g. billing.stripe.invoice.payment_failed), and fanned out to endpoints with receive_inbound enabled.
Payload transformations
Per-endpoint pipelines: rename, only/drop fields, add, nest, pick. Misconfigured steps fail fast at registration time, not at 2am.
Replay window
30-day replay on Growth: requeue any delivery, including dead ones. Old attempts stay in the immutable log.
White-label customer portal API
Mint scoped portal tokens per customer; they see only their endpoints' deliveries and can replay within scope. Revocable any time. The embeddable portal UI is on the roadmap — the API is what ships today.
Admin API + auth
All admin endpoints require X-API-Key. Portal endpoints require scoped X-Portal-Token. Inbound endpoints are signature-verified per source.