Skip to main content

Overview

Identity fields

WhatsApp identity is no longer phone-only. Kapso can now store and expose:
  • wa_id or phone_number
  • business_scoped_user_id
  • parent_business_scoped_user_id
  • username
Depending on the payload and rollout stage, phone-based fields can be null while BSUID fields are present. For migration details:

Conversations

Fields: phone_number, business_scoped_user_id, parent_business_scoped_user_id, username, status (active/ended), last_active_at, metadata, assignee Access:

Messages

Fields: content, message_type, direction (inbound/outbound), status (pending/sent/delivered/read/failed), metadata, additive identity fields on the message payload (business_scoped_user_id, parent_business_scoped_user_id, username or Meta-style from_user_id / to_user_id) Message types: text, image, video, audio, document, location, interactive, template, reaction, contacts Access:

Media

Stored: File attachments on messages (images, videos, audio, documents) Audio transcripts: Automatic transcription with provider info, detected language, and duration Access:
  • Dashboard: WhatsApp > Data > Media
  • WhatsApp API: GET / (get download URL), then fetch the URL to download
  • Platform API: POST /media (upload files for sending)

Contacts

Fields: wa_id, business_scoped_user_id, parent_business_scoped_user_id, username, profile_name, display_name, metadata, notes Access:
  • Dashboard: WhatsApp > Data > Contacts

Calls

Fields: call_id, direction (incoming/outgoing), status (ringing/accepted/missed/declined/ended), duration_seconds, started_at, ended_at, user_wa_id, business_scoped_user_id, parent_business_scoped_user_id, username Access:
  • Dashboard: WhatsApp > Data > Calls
  • Webhooks: Delivered via WhatsApp call events

Referrals (CTWA)

Click-to-WhatsApp ad data captured when users message from Meta ads. Fields: source_type (ad/post/organic), source_id, source_url, ctwa_clid, headline, body, media_type Access:
  • Dashboard: WhatsApp > Data > Ads (CTWA)
  • Webhooks: Included in message.received payload when present

Broadcasts

Fields: name, template, status (draft/sending/completed/failed), recipient counts, delivery stats Access:

Retention

Default: Everything above is kept indefinitely. Retention window: Paid projects can set one in Project settings > Message retention — 30 days, 90 days, 6 months, 12 months, or a custom number of days. Free projects keep everything. Deleted: Ended conversations whose last activity is older than the window, along with their messages, media, audio transcripts, referrals, flow executions, webhook deliveries, broadcast recipient rows, and the project events recorded against them. Agent execution transcripts go once nothing else references them. Messages that never belonged to a conversation are deleted on the same window, measured from when they were created. Kept: Contacts, broadcasts and their delivery counts, and template statistics. Calls are unlinked from a deleted conversation but not deleted themselves. Project events that are not tied to a deleted conversation follow the retention window from your plan, not this one. Message logs: The searchable log of messages is kept for 30 days, or for your retention window if that window is shorter. Deleting a conversation removes its log entries at the same time. Applying a change: Shortening a window takes effect after 48 hours, and project owners are emailed when it is scheduled. Lengthening it, or going back to keeping everything, applies immediately. Deleted conversations cannot be recovered.