v1 webhooks are legacy. Use v2 for all new integrations.
New webhooks default to v2. Existing v1 webhooks continue to work with no breaking changes.
v1 vs v2 differences
v1 (legacy)
- Includes nested
whatsapp_config object in all payloads
- Uses
whatsapp_config_id as the primary identifier
- Event:
whatsapp.config.created for connection lifecycle
- Message structure:
message_type, content fields
- Message origin:
message.origin at message level
v2 (recommended)
- Phone-number-first with
phone_number_id at top level
- No nested
whatsapp_config object
- Event:
whatsapp.phone_number.created for connection lifecycle
- Message structure: Meta-style with
kapso extensions
- Message origin:
message.kapso.origin inside kapso object
Migration to v2
1. Check current version
Look for the X-Webhook-Payload-Version header in incoming webhooks:
2. Update webhook handler
Before (v1):
After (v2):
3. Handle message structure
Before (v1):
After (v2):
v1 event: whatsapp.config.created
Lifecycle event fired when customer connects WhatsApp (v1 only).
For v2, use whatsapp.phone_number.created instead. See Connection detection.
Headers:
Payload (abbreviated):
v1 payload examples
message.received
message.sent
conversation.created
Handling both versions
If you need to support both v1 and v2 webhooks during migration:
Backward compatibility
v1 webhooks remain fully supported. You can migrate at your own pace:
- Existing v1 webhooks continue to work unchanged
- No breaking changes or deprecation timeline
- Both versions use the same signature verification (HMAC SHA256)
- Both versions support the same retry policy and ordering guarantees
Migrate to v2 when ready to benefit from simpler payload structure and Meta-compatible message format.