Publish once, deliver to every subscriber

Deliver each event that you publish to every matching subscription, where each subscription has its own filter and retry policy. Relay retries a failing endpoint under the policy of its own subscription, while the other subscribers receive the event on time.

Pub/sub delivery to your HTTP endpoints, with retries and replay

Relay checks each event that you publish against the filter of every subscription on its channel and delivers the event to each subscription that matches. For each of those subscriptions, Relay sends the event to the HTTPS endpoint that you register and signs the request with the subscription's secret so that your endpoint can verify the sender. Relay also stores every event for 7 days, which means that you can replay a time window to one subscription once its endpoint recovers.

Publish, filter, deliver, and replay events

Channel publishing

Your code publishes each event once to a named channel, from which Relay delivers a separate copy to every subscription that matches the event.

Event filtering

When you create a subscription, name the event types that it should receive, either exactly or by pattern, and add conditions on event properties where you need them. Relay then delivers to that subscription only the events that match.

Webhook delivery

Relay sends each event to the subscription's HTTPS endpoint as a signed HTTP request. When the endpoint returns an error or the request times out, Relay retries the delivery with exponential backoff.

Fan-out patterns

For one publish call, Relay delivers to every matching subscriber on the channel and tracks each delivery on its own, so you can check the status of each subscriber's delivery, including any that Relay is still retrying.

Delivery guarantees

Relay delivers each event at least once to every matching subscription and retries a failed delivery on the policy that you configure. After the last retry in that policy, Relay moves the event to a dead-letter queue, where you can inspect it and replay it.

Event replay

Relay stores each event for 7 days. Within that window, you can replay the events from a time range to one subscription in their original order, either to reprocess them after a fix or to bring a subscriber up to date after an outage.

< 100ms
Delivery latency

From publish to the subscriber

7 days
Event retention

The window in which you can replay events

At least once
Delivery guarantee

Relay retries each delivery up to the retry limit that you set

Build faster with solutions designed for real-world needs

Decouple services with publish and subscribe

When a project changes state, the service that owns the project publishes one event to a channel. Each interested service subscribes to that channel on its own, so the publishing code contains no list of the services that consume the event.

Impact

The sample publishes one project.shared event when Marcellin Dubois shares a project with the Foldgate Studios design team. Relay accepts one event per idempotency key, so a retried publish call from your code puts one event on the channel.

Prompt for a coding agent: Publish one project.shared event each time a user shares a project, even when the call retries.

Conjoin IDE

Select a file to view its contents

Retry a failed webhook on a backoff that you set

Create a subscription with a delivery URL, a signing secret, and a retry policy. Relay retries a failed delivery with exponential backoff until the last retry in that policy, after which it moves the event to a dead-letter queue for you to investigate.

Impact

Relay tries up to six times to deliver each payment.captured and payment.refunded event to the Fernway Health endpoint, with a longer wait before each retry. Relay signs every one of those requests with the subscription's secret, so the Fernway Health endpoint can confirm that each payment event comes from Relay.

Prompt for a coding agent: Deliver payment events to our endpoint with up to six signed retries.

Conjoin IDE

Select a file to view its contents

Trace any event from publish to delivery

Read the event history of a channel with the delivery status for each subscription, and follow one event through every delivery and retry.

Impact

The sample reads up to 50 subscription.activated events that Burrowquill published between 08:00 and 09:00 UTC, together with the delivery status of each event. You can find a failed delivery and its subscriber in that one response, since Relay records every delivery and retry against the event.

Prompt for a coding agent: List the subscription.activated events from 08:00 to 09:00 UTC with their delivery status.

Conjoin IDE

Select a file to view its contents

Replay missed events after a subscriber recovers

Relay stores events for 7 days, so when a subscriber's endpoint comes back from an outage, you can ask Relay to redeliver the events from the time range of that outage to its subscription, in the order that you published them.

Impact

The sample replays the shipment.dispatched and shipment.delivered events from 18:30 to 21:15 UTC to the warehouse subscription alone, so the other subscribers on the Hollowpine dispatch channel receive each event once.

Prompt for a coding agent: Replay the missed shipment events to the warehouse subscription alone.

Conjoin IDE

Select a file to view its contents

Build your next app on Conjoin

Conjoin will open with a free Build tier, while the pricing page already lists the launch prices for Pro and Business. If you tell us what you're building, we'll talk you through early access.