Event:order.completed· Destinations:Webhook (HMAC-signed)Webhook (secondary)Slack
The problem
Webhooks are the lowest-friction way to let customers with their own backends receive your product events. They are also the highest-trust surface you expose: the customer's receiver needs to be certain each request is really from you and not from a replay, a spoof, or an unrelated misrouted retry.
Rolling your own per-customer HMAC layer means your SaaS owns secret storage, rotation, signature algorithm support, timestamp tolerance, and retry semantics for every tenant. That is a lot of cryptographic surface for a feature most teams want to ship as a toggle.
The embedded iPaaS pattern moves that work into Meshes. Each customer enters their webhook URL and HMAC secret inside your embedded workspace UI. Your app emits product events; Meshes signs every delivery with the customer's own secret, retries on failure, and gives the customer a delivery log they can audit. The same pattern covers your internal environments: separate webhook endpoints per dev, staging, and production workspace with their own secrets.
The event flow
Meshes receives the source event once, maps it to the right destinations per workspace, and keeps delivery visible when downstream APIs fail.
Event payload
order.completed{
"order_id": "ord_lannister_77",
"customer_id": "cus_lannister",
"account_id": "acc_casterly",
"total_cents": 12900,
"currency": "usd",
"items": 3,
"completed_at": "2026-04-17T18:22:00Z"
}Meshes POSTs the event to the URL the customer registered in the embed, signing the payload with the HMAC secret they provided. Every request carries a signature header and a timestamp the customer can verify.
Customer receivers can trust every request is really from you — with no shared secret in your application code and no crypto library your team has to maintain.
Customers who want a second endpoint — for example, an audit log or a staging replica — can register an additional URL and secret inside the same workspace.
Multiple receivers stay consistent without your app branching; each endpoint is signed with its own secret and retried independently.
Optional operational alert that fires when a webhook delivery has exhausted retries, routed to the customer's own Slack workspace.
The customer's ops team sees delivery failures in real time without waiting for you to notice.
How Meshes handles it
Instead of maintaining separate workers, retry logic, and visibility per destination, Meshes gives you one event path, destination-aware routing, and built-in delivery guarantees.
From your product
order.completedenters Meshes onceimport MeshesEventsClient from '@mesheshq/events';
const meshes = new MeshesEventsClient(
tenant.meshesPublishableKey,
);
await meshes.emit({
event: 'order.completed',
resource: 'order',
resource_id: 'ord_lannister_77',
payload: {
order_id: 'ord_lannister_77',
customer_id: 'cus_lannister',
account_id: 'acc_casterly',
total_cents: 12900,
currency: 'usd',
items: 3,
completed_at: '2026-04-17T18:22:00Z',
},
});Across destinations
On every delivery
Why this matters
Your customers verify every request with their own secret. Your app never stores one, rotates one, or ships signing code — the embed and Meshes own that surface.
When a customer rotates their HMAC secret, they do it in the embed. Your product does not redeploy, re-sign, or coordinate a cutover.
Every workspace has its own signed delivery log, retry trail, and replay controls. Customers can prove what was delivered and what was not without asking your team.
Related
Docs
See how per-workspace webhook destinations, signatures, and retries are configured inside Meshes.
Open linkDocs
See how customers register their webhook URL and HMAC secret from inside your product via the embed.
Open linkDocs
Understand how workspace-scoped sessions keep customer secrets from ever reaching your backend.
Open linkBlog
Why exponential backoff and jitter matter for signed webhook delivery.
Open linkBlog
How to keep failed signed deliveries available for replay without losing trust.
Open linkCompare
See what it costs to own per-tenant HMAC signing, secret rotation, and replay yourself.
Open link