Skip to main content
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
  • 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.