Events registered once
Event types are declared with their schema and validated on publish, so a typo in a payload is caught where it is written.
Webhook delivery as a library. Event types register at runtime with an optional JSON Schema, every delivery is signed with HMAC-SHA256, retries back off from five seconds to two hours, and anything that still fails waits in the DLQ until the customer fixes their endpoint and you replay it.
Configurable retry schedules with exponential backoff, and anything that exhausts them lands somewhere you can see it.
Receivers verify authenticity with a single call, so a webhook endpoint does not have to trust its own inbox.
Event types are declared once with schema validation and referenced everywhere else by name.
Outbound webhooks that keep trying, and tell you honestly when they have stopped.
Event types are declared with their schema and validated on publish, so a typo in a payload is caught where it is written.
Schedules are configurable per endpoint and back off exponentially, which is the difference between a slow receiver recovering and a slow receiver being hammered.
Failed deliveries are captured with their payload and the response that refused them, and can be inspected and replayed once the receiver is fixed.
Receivers verify with one call, so authenticity does not depend on the endpoint being secret.
Rate limiting is held per receiving endpoint, which protects a downstream service from a burst it did not ask for.
Development runs in memory and production on Postgres, behind an interface small enough to replace.
Exponential backoff with a dead letter queue.
HMAC-SHA256 signatures per endpoint.
Glob event matching against dynamic event types.
Endpoints, retries and deliveries inspectable over HTTP.
Relay delivers webhooks. Tenant-scoped endpoints, event types defined at runtime, signed deliveries, retries, and a dead-letter queue you can replay, all as a library you import.
Replay is the feature customers actually ask about, and it is only useful if deliveries are stored with enough fidelity to reconstruct exactly: same body, same signature, same headers. Storing a summary instead of the payload is a decision that looks reasonable until the first support request.
Shipping something on Relay? Nobody is listed here yet. Tell me what you built and you will be the first.
Get listed →