Dispatch docs
Send customer webhooks from your app with customer-managed endpoints, event catalogs, retries, and replay.
Model
Create an app for the product surface that emits events. Each customer, account, tenant, or organization in your product is a recipient. Recipients add endpoints and subscribe to the event types you expose.
- App: the product area that sends webhooks, such as "Billing events".
- Recipient: one customer or tenant in your product, such as
customer_123. - Endpoint: the recipient-owned URL where deliveries are sent.
- Event type: a named event such as
invoice.paidorjob.failed. - Message: one event you send through Relin to the recipient's matching endpoints.
Backend setup
- Create an API key from the Dispatch dashboard.
- Create an app and publish event types such as
invoice.paid,user.created, orjob.failed. - When a signed-in customer opens webhook settings, create a portal session for that customer's recipient ID.
- Open the portal URL so the customer can manage endpoints without giving them workspace access.
- Send messages with the same recipient ID so Relin routes each message to that customer's subscribed endpoints.
Create an app
Apps group recipients, endpoints, event types, and messages for one webhook product surface.
The response includes an appId. Use it for event types, recipients, portal sessions, messages, and debugging calls.
Publish event types
Event types are the list your customers see when choosing subscriptions in the portal.
Customer portal
Create a short-lived portal URL when a signed-in customer opens webhook settings in your app. The portal URL is scoped to one recipient.
Embed the returned URL in an iframe or open it in a new tab. Customers can add endpoints, choose event types, enable or disable delivery, and rotate endpoint secrets.
Message format
Send the recipient, event type, and JSON data from your backend. Include a stable message ID when you want duplicate sends to resolve to the same message.
Use idempotencyKey instead of messageId if that is the naming style your backend already uses. If neither is provided, Relin generates a message ID.
Inspect and replay
When a customer says they did not receive an event, fetch the message and attempts first. Replay after the customer's endpoint is fixed.