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.

Ready to onboard your first tenant?

Start your 30-day free trial on the Platform tier and create your first onboarding session in minutes.