Step 1: Connect your number
- In WhatsApp Manager, check the WABA for other numbers, templates, or assets you still need.
- Turn off two-step verification, under Phone numbers → Settings → Two-step verification, or re-registration will ask for a PIN.
- Remove the phone number from the WABA. Leave the WABA itself in your Business Portfolio.
- Wait about 10 minutes.
- In Kapso, start embedded signup. Create a new WABA when the flow asks.
- Recreate your templates on the new WABA (see Step 5). Wait for Meta review.
2655093, or Meta blocks a billing change over a pending balance, the WABA is still tied to another partner, most often through your old provider’s credit line. In Meta WhatsApp account settings, open the WABA’s Summary → Payment method. If it shows a Credit line from your old provider, ask your old provider to revoke its allocation for this WABA and confirm when it is done. Disconnecting, or disappearing from Partners, does not revoke it. Revoking changes billing for every number on that WABA. If the error remains after one retry, contact Kapso Support to escalate to Meta. A different number on a new WABA unblocks you in the meantime. See recovery steps.
If the reconnect fails, see coexistence troubleshooting.
You can also start on a fresh number. Instant setup gives you a pre-verified US number, with no SMS verification step.
Testing first? Build against a sandbox number while your current provider still carries production traffic.
Step 2: Get your phone number IDs
Templates belong to the WABA, not to a number, so every number on that WABA can send them. That is why the template endpoints take the WABA ID in the path, as in
POST /{waba_id}/message_templates.
Step 3: Update message sending
For every message type, Kapso uses one endpoint:POST /{phone_number_id}/messages. The type field says which kind of message you are sending, and a field of that same name carries the content. A text message sets type: "text" and puts the body in text.
Some providers proxy Meta’s Cloud API. If yours did, your payloads already have this shape, and you only change the base URL and the auth header. If your provider had its own message API, use the tabs below as the target shapes.
- Text
- Template
- Media
- Interactive
- Location and reactions
- Read and typing
Free-form messages, inside the 24-hour window:To reply to a specific message, add
"context": { "message_id": "wamid..." }. To address a contact that has no phone number, use recipient with a business-scoped user ID instead of to. See Send text.Step 4: Update webhooks
Register per phone number:message, conversation, and phone_number_id, with Kapso’s own fields under message.kapso. The event name arrives in the X-Webhook-Event header. Full shapes in Message events.
conversation threads the messages for you, but it does not track the 24-hour window. A send can fail with 131047 while conversation.status is active. Read conversation.kapso.last_inbound_at, or handle the rejection and fall back to a template.
from is not always present. WhatsApp can identify a contact with business_scoped_user_id instead. See business-scoped user IDs.
For connection lifecycle events (a customer finishing a setup link, Meta disabling a WABA), use project webhooks instead. You configure those once for the whole project.
Does your current provider forward raw Meta payloads? Register the webhook with
"kind": "meta" and Kapso forwards Meta’s exact payload with no reshaping. Your existing parser keeps working.X-Webhook-Signature:
X-Idempotency-Key. See Security for Python and Ruby, and Advanced for buffering and ordering.
Step 5: Templates
Templates belong to the WABA at Meta, not to your provider. If you build templates in WhatsApp Manager, pull them into Kapso from WhatsApp → Templates → Sync from WhatsApp. The path takes the WABA ID, not the phone number ID:Multi-tenant setups
If you message on behalf of your own customers, each one becomes a Kapso customer that connects its own number through a setup link:url. They log in with Facebook and connect in about five minutes. You then get whatsapp.phone_number.created on your project webhook, with the customer.id and phone_number_id. See Onboard customers.
One API key covers every customer. Migrate one customer at a time.
Cutover
Migrate one number at a time. A number’s WhatsApp registration and webhook routing move as a unit, so there is no gradual split per number.
Meta bills message charges against the WABA either way, per delivered template message. See pricing.

