Vanity Pages Implementation
This guide shows a full working pattern for embedding Wacht webhook pages inside your SaaS settings UI.What users will get
- They open your
Webhookssettings page. - Your app fetches a short-lived access ticket from your backend.
- Your app embeds Wacht webhook pages in an iframe.
- They can manage endpoints, deliveries, replay, and secret rotation from your app.
Step 0: create your Webhook app (one-time provisioning)
Before embedding, create a webhook app for each tenant/deployment.wh_<deploymentId>, so ticket issuance can target the correct app.
Full backend example (Express)
Create an endpoint in your backend that validates permissions, then issues a webhook ticket.Full frontend example (React)
This example supports/settings/webhooks, /settings/webhooks/endpoints, and /settings/webhooks/deliveries.
Route wiring example (React Router)
Security requirements
- Issue tickets only from backend.
- Enforce RBAC before ticket creation.
- Keep expiry short (for example 120 seconds).
- Validate tenant ownership before using
wh_<deploymentId>.
Where backend_host comes from
In the real console flow, iframe base URL is derived from deployment context:
SDK + API references
- React Router
useWebhookAppSession - React Router
useWebhookEndpoints - React Router
useWebhookDeliveries - React Router
useWebhookAnalytics - React Router
useWebhookTimeseries - Webhooks Backend API Reference
Verification checklist
- Unauthorized user gets
403from ticket endpoint. - Expired ticket cannot be reused.
- Endpoint CRUD and test flow work inside iframe.
- Delivery replay works and task status updates appear.
