Webhook infrastructure for your platform
Define your event types, publish events via API, and let Zyphr handle delivery, retries, monitoring, and an embeddable portal for your customers.
Custom Event Types
Define your own event types like order.created or invoice.paid. Organize by category with example payloads.
One API Call to Publish
Publish an event and Zyphr fans it out to all subscribed endpoints. Batch publish up to 100 events at once.
Automatic Retries
Configurable retry policies with exponential backoff. Circuit breakers prevent overwhelming failing endpoints.
Delivery Logs
Full request/response capture for every delivery attempt. Filter by tenant, event type, or status.
Embeddable Portal
Drop-in React component or iFrame lets your customers manage their own endpoints and view delivery logs.
HMAC Signatures
Every delivery is signed with HMAC-SHA256 per the Standard Webhooks spec. Zero-downtime secret rotation included.
Publish events in one API call
Use the Zyphr SDK or REST API to publish events. Zyphr automatically fans out to all subscribed endpoints with HMAC signatures and retry handling.
publish-event.ts
import Zyphr from '@zyphr/sdk';
const zyphr = new Zyphr('zy_live_xxx');
// Publish an event to all subscribed endpoints
const { data } = await zyphr.waas.publishEvent(
'app_abc123',
{
event_type: 'order.created',
tenant_id: 'tenant_xyz',
data: {
order_id: 'ord_456',
total: 149.99,
currency: 'USD',
},
}
);
console.log(data.deliveries_created);
// 3 — delivered to all matching endpointsHow it works
Your platform publishes events to Zyphr. Zyphr matches them to tenant endpoints, signs each delivery with HMAC-SHA256, and handles retries with exponential backoff and circuit breakers.
Your Platform --> Zyphr WaaS API --> Delivery Queue --> Customer Endpoints
| |
Event Types Retries, Circuit
Endpoints Breakers, DLQ
Deliveries Rate LimitingBuilt for multi-tenant platforms
Every endpoint is scoped to a tenant you define. Publish an event for a specific tenant and Zyphr delivers only to their subscribed endpoints. Full isolation, zero leakage.
Per-tenant endpoint isolation
Tenant-scoped delivery logs
Embeddable customer portal
Portal tokens with expiry
// Generate a portal token for your customer
const { token } = await zyphr.waas.generatePortalToken(
'app_abc123',
{
tenant_id: 'tenant_xyz',
allowed_event_types: ['order.*'],
expires_in: 3600,
}
);
// Embed in your React app
<ZyphrWebhookPortal token={token} />Frequently asked questions
How is this different from Zyphr Webhooks?
Zyphr Webhooks lets you receive events from Zyphr services (email delivered, push failed, etc.). Webhooks-as-a-Service lets you power webhook delivery for your own platform's customers. You define the event types, your customers manage their endpoints.
How does multi-tenant isolation work?
Each endpoint is scoped to a tenant_id you assign. When you publish an event, Zyphr only delivers to endpoints belonging to that tenant. Tenants can only see their own endpoints and delivery logs through the embeddable portal.
What happens when a delivery fails?
Failed deliveries are automatically retried with exponential backoff (default: 6 attempts over 24 hours). If an endpoint fails consistently, the circuit breaker trips to prevent wasting resources. You can retry individual deliveries or bulk-retry from the dashboard.
Can my customers manage their own endpoints?
Yes. Zyphr provides an embeddable portal as a React component or iFrame. Your customers can register endpoints, select event types, view delivery logs, and retry failed deliveries — all within your app.
What are the plan limits?
The free plan includes 1 application, 5 event types, 10 endpoints, and 1,000 events/month. Paid plans scale up to unlimited everything. See the pricing page for full details.
Stop building webhook infrastructure
1,000 events free every month. Ship webhooks to your customers today.
Get Started Free