Skip to main content
Both Kapso and LazyApp sit on Meta’s WhatsApp Cloud API, so templates, the 24-hour service window, WABA assets, and Graph-shaped payloads are familiar. Kapso exposes a Meta proxy plus a separate platform API (X-API-Key). LazyApp gives you the same idea: a Meta-compatible proxy and a native /v1 API, both authenticated with Authorization: Bearer. Unlike Zernio’s conversation-centric rewrite, you can often cut over Kapso send traffic with a base-URL and auth header change, then migrate webhooks and platform features. Most integrations land in half a day to a day.

Quick reference

Before you start

  • Kapso project API key (export history / templates before cutover if you need them)
  • LazyApp workspace and API key (sk_test_ first) — Authentication
  • Plan how each Kapso customer maps to a LazyApp platform customer (or a single workspace if you are not multi-tenant)

How the concepts map

WABA assets travel with the number; message history does not. Approved templates, display name, quality rating, and messaging tier live on Meta’s WABA and come along when you reconnect the same number. Conversations stored only in Kapso stay there — export anything you need before you cancel.

Step 1: Point Meta-shaped sends at LazyApp

If your Kapso code already posts Cloud API bodies, keep the body. Change host and auth:
The version segment is accepted and ignored. Do not send X-API-Key — LazyApp expects Bearer only. Proxy coverage today (same services as /v1, not a fork): Full native shapes (scheduling, events, broadcasts, Verify) live under /v1 — see Migrating from Meta’s Cloud API and Messages.

Step 2: Move WhatsApp numbers

Pick the path that matches how the number was connected to Kapso.

Reconnect your own (or customer’s) WABA

If the WABA belongs to you or your customer (setup links / BYO SIM):
  1. Create a LazyApp platform customer per Kapso customer (skip if single-tenant — connect in the console).
  2. Issue a setup link and open it (or send it to the customer).
  3. Complete Meta Embedded Signup with the Facebook login that owns the WABA.
  4. Confirm with connection.connected / customer.connected webhooks — not only the browser redirect.
Because the WABA stays the same, approved templates and quality rating come with it. Details: Connecting WhatsApp.
Coexistence: pairing with the WhatsApp Business App is exclusive to one BSP. Disconnect Kapso in the Business App first (Settings → Account → Business Platform → Disconnect), then run LazyApp’s connect flow and scan again if required.

Kapso-managed / Instant Setup numbers

If the number lived in Kapso’s pool, it does not move with you. Connect a number you (or your customer) own through Embedded Signup / a setup link. LazyApp does not sell a dedicated phone-number SKU catalogue like some CPaaS providers.

Credentials paste

LazyApp does not expose a public “post Meta system-user token” connect endpoint for integrators. Connection is Embedded Signup (console or setup link). Do not invent a credentials POST from Kapso’s platform API into LazyApp. After connect, confirm the number with GET /v1/capabilities. Store phone_number_id ↔ LazyApp connection_uuid if you use both.

Step 3: Prefer native sends when you are ready

You can stay on the Meta proxy indefinitely. When you want LazyApp-native features, switch bodies to flat JSON:
LazyApp is recipient-centric on /v1/messages, not Zernio’s “create conversation then post messages” model. Conversations still exist for inbox and webhooks (conversation_id on payloads).

Step 4: Update webhooks

Kapso often registers webhooks per phone number. LazyApp webhooks are workspace-scoped with event filtering. Scope multi-tenant handlers by connection / customer fields on the payload.

Event mapping

Payloads are LazyApp-shaped (flat envelope), not nested Meta entry[].changes[]. Full list: Webhook events.

Signature verification

Same HMAC-SHA256 idea; header and encoding differ:
See Verifying webhooks. Delivery is at-least-once — dedupe on event id / X-LazyApp-Delivery. Retries and auto-pause: Webhooks overview.

Step 5: Templates and flows

If you reconnected the same WABA, templates are already at Meta. List with GET /v1/templates or the Meta-compat templates routes. Recreate only when the WABA is new. Flows: use LazyApp’s Flows guide under /v1/flows (create, publish, send via interactive). If Kapso hosted your Flow data-exchange endpoint, host that endpoint yourself after cutover.

Feature map

You also gain: cursor pagination, Idempotency-Key on all writes, events that decouple code from template names, flat monthly plans with 0% added to Meta’s message rates, and a WhatsApp-only focus (no Instagram/X inbox). No LazyApp equivalent (plan around these):
  • Kapso-hosted serverless functions for webhooks / Flow data endpoints
  • Raw Meta webhook forwarding (kind: "meta")
  • Purchasing numbers from a LazyApp number inventory
  • Paste Meta system-user credentials via public API

Cutover strategy

Migrate number by number. Webhook routing and registration move with the number. Export Kapso history, reconnect through LazyApp, verify webhooks, then cancel on Kapso. For platforms, migrate one customer at a time.
Meta’s message billing and template approvals live on the WABA — they are not “re-approved” by LazyApp when you reconnect the same number. Meta keeps billing messages to the business’s own payment method at its own rates; LazyApp adds 0% and charges only its flat plan. Live API keys need the Pro plan, so pick it before the pilot phase.

Troubleshooting