How to think about it
- Own workspace: connect from the LazyApp console (Embedded Signup). Connecting your own number needs a plan, and each plan includes a set number of numbers; the shared test number is free.
- Meta bills messages, not LazyApp. Add a payment method to the WhatsApp Business Account in Meta. Meta charges it at Meta’s rates, and LazyApp adds 0%. See Meta message billing.
- Your customers’ numbers: use setup links so each platform customer connects into their own workspace.
- Confirm from webhooks (
connection.connected/customer.connected), not from the browser redirect alone. - After connect, read capabilities for that number — calling, messaging limits, and quality are per connection.
Console Embedded Signup
For your own workspace:- Open Connections in the LazyApp console.
- Start Connect WhatsApp (Meta Embedded Signup).
- Finish Meta’s screens (Business Portfolio, WABA, phone number).
- LazyApp stores the connection on the current workspace and mode (
live/test).
There is no public
GET /v1/connect/{platform} OAuth starter for Twitter/Facebook/etc. — that Zernio-style surface does not apply here. There is also no public POST /v1/connect/whatsapp/credentials — use Embedded Signup or setup links.
Details filled in for you
When your workspace has a name, a website and a time zone (and you have a billing email or a login email), LazyApp sends them to Meta so the business portfolio screen arrives filled in. Meta only uses them when all four are present; the person signing up can still edit every field.Finishing without a phone number
A business can share or create a WhatsApp account in Meta’s window and skip adding a number. LazyApp still connects the account and then asks which number to send from: pick one already on the account, or add a new one (country code, number, and the name customers will see). LazyApp holds the account for one hour while you choose. A new number then needs a verification code and registration; see Phone numbers.When Meta’s window closes early
If the person closes Meta’s window, LazyApp shows which step they stopped at (choosing the business, the WhatsApp account, the number, the code or the permissions) and what to do next. If Meta showed an error, LazyApp repeats Meta’s message with the error code and session id to quote to support.While Meta is still reviewing LazyApp’s app (App Review for
whatsapp_business_management and whatsapp_business_messaging), Embedded Signup only completes for businesses LazyApp has added as testers. Until then, connect with Paste details from Meta using your own system-user token.WhatsApp Business app coexistence
Businesses already on the WhatsApp Business app can connect the same number to Cloud API without giving up the app. During Embedded Signup, Meta offers Connect existing WhatsApp Business app account. LazyApp marks the connection as coexistence and requests contact and history sync from Meta. When coexistence is active:- Messages can mirror between the app and Cloud API (Meta syncs up to about six months of history).
- Contacts from the app are imported via Meta’s
smb_app_state_syncwebhooks. - Outbound messages sent from the phone app arrive as
message.receivedwith an echo flag — treat them like inbound for inbox UX. - Revokes in the app emit
message.deletedfor the original stored message.
flows: false and flows.data_endpoint: false on GET /v1/capabilities. Plan Flow-based onboarding for Cloud-API-only numbers.
Meta limitations (same on every BSP):
History sync window: LazyApp requests sync immediately after signup. Meta allows about 24 hours to complete it. If sync never starts, the customer may need to disconnect and run Embedded Signup again.
Disconnection: The business disconnects from the WhatsApp Business app (Settings → Account → Business Platform → Disconnect). That cannot be done via API. Meta notifies LazyApp; the connection moves to a disconnected state and
connection.disconnected fires. Treat webhook absence as inconclusive — poll GET /v1/capabilities when you need to confirm liveness.
Coexistence uses the same send and webhook endpoints as a standard Cloud API number. The practical differences are throughput, Flows being off, and read-state quirks when the phone app owns blue ticks.
Platform customers (white-label)
When each of your users brings their own WhatsApp number:- Create a platform customer.
- Create a setup link with their
customer_idand yourredirect_url. - Send them the returned
url(email or Connect WhatsApp button). - Confirm with
customer.connected(andsetup_link.failedon failure).
Headless vs hosted
LazyApp hosts the connect UI at/connect/{token}. You do not build a Meta page picker yourself — WhatsApp Embedded Signup selects the WABA and number inside Meta’s flow. Set a public connect host in Branding when that URL should use your domain. The host must proxy /connect to LazyApp.
Optional per-link success_webhook_url / failure_webhook_url fire in addition to your workspace webhooks. Still treat them as secondary to customer.connected / setup_link.failed.
Reconnect
Whenconnection.disconnected or connection.attention_required fires for a customer, issue a new setup link with allowed_connection_type: "reconnect" (or either) and prompt them in your UI. Details in setup links.
After connect
GET /v1/capabilities— confirm the number is listed and which features Meta granted.- Send a template or session message (quickstart).
- Register webhooks for delivery and inbound (webhooks).
Related
- WhatsApp overview — quick reference and doc map
- Setup links — create, options, revoke
- Build a platform — customer model and webhook routing
- Capabilities — what the connected number can do
- Event reference —
connection.*andcustomer.connected