For SaaS platforms
Let your customers connect WhatsApp inside your SaaS
Your customer clicks Connect WhatsApp, completes Meta's Embedded Signup, and lands back in your product seconds later — connection ready, webhook live. Dualhook runs the WhatsApp onboarding infrastructure behind the scenes so you ship the integration without becoming a WhatsApp BSP yourself.
Where this fits
Vertical SaaS
Healthcare, real-estate, hospitality, legal-tech, clinics — onboarding many small-business clients, each with their own WABA, typically via Coexistence so the existing WhatsApp Business mobile app keeps working.
B2B2C CRMs & shared inboxes
Route messages to per-tenant backends without putting a BSP in the message path. No auto-mark-as-read behaviour, no hidden message storage on a third party.
Hospitality, real estate, clinics, legal tech
Industries where each end-customer must own their own number for regulatory or trust reasons. Dualhook's per-tenant model fits cleanly.
E-commerce enablement & marketing platforms
Platforms that sit on top of Shopify, BigCommerce, or DTC stacks and want to add WhatsApp without bolting on a heavy BSP layer.
What you get
Tenant mapping is first-class
You pass tenantId on session creation. Every lifecycle event is round-tripped with that id, plus your free-form metadata field. List endpoints filter by tenant.
Per-tenant webhook routing
Each onboarding session sets a webhookOverrideUrl + verifyToken for that tenant. Dualhook Platform v1 subscribes Meta's Webhook Override at the WABA level (one URL/verify token per connected WABA) so message-path traffic goes Meta → tenant directly. Per-phone-number overrides are a Meta capability we plan to expose later.
Co-branded onboarding URL
End-users see your brand. The dualhook.com page exists for a few seconds because Meta requires Embedded Signup to launch from a domain whitelisted on the Meta App.
Signed lifecycle events
HMAC-SHA256 signed onboarding.started / completed / failed, connection.mode_resolved, connection.disconnected, and coexistence heartbeat events. Durable retry: 1m → 5m → 15m → 1h → 6h → 24h.
Sibling-WABA bookkeeping
Dualhook v1 uses WABA-level Webhook Override (one URL per connected WABA). Re-onboarding the same tenant replaces the webhook config cleanly across all its numbers (latest wins), while a mismatch against another tenant's WABA surfaces a clear waba_webhook_conflict — no silent cross-tenant overwrites.
Audit-logged token reveal
Reveal Cloud API access tokens on demand via a dedicated endpoint. Every reveal is recorded against your API key id, with Cache-Control: no-store on the response.
Why direct Meta routing matters
Most WhatsApp BSPs sit in the message path. That means inbound messages travel Meta → BSP → you, and the BSP becomes a message-storage layer (often with auto-mark-as-read behaviour, retention defaults, and compliance surface area you didn't ask for). Dualhook configures Meta's Webhook Override at WABA-subscription time, so your tenant's endpoint receives message-path webhooks directly from Meta. Dualhook stays out of the message path.
Keep reading
Docs, guides, and the Platform overview.
Dualhook Platform
The commercial overview of the Platform tier — onboarding flow, what Dualhook handles, pricing, build vs buy.
Platform API docs
REST reference for onboarding sessions, connections, tenants, event webhooks, errors, and rate limits.
Embedded Signup for SaaS
Practical guide to adding Meta's Embedded Signup to a SaaS product, with the gotchas Meta's docs leave out.
Webhook Override for multi-tenant SaaS
How per-tenant webhook routing works on top of Dualhook Platform v1's WABA-level Webhook Override path.
Ready to onboard your first tenant?
Start your 30-day free trial on the Platform tier and create your first onboarding session in minutes.