A webhook you built yourself.
In the Whatsable dashboard, open Developer, add an endpoint URL, and enable incoming. The first Click-to-WhatsApp inbound POSTs the referral to that URL. See https://whatsable.app/integrations/webhook
When someone taps your Click-to-WhatsApp ad and messages you, your Whatsable inbox Ad card shows the ad preview and their first line — both from that same inbound. Know which Meta creative started the conversation before you type a word back.
After a Click-to-WhatsApp inbound, the Whatsable inbox Ad card shows the ad preview and the customer's first line from that same event.
The preview is the creative from that inbound. The first line is what the customer typed in that same message — not something buried in the ad object.
"Hi, I saw your ad and wanted to ask about pricing."
Someone clicks your Click-to-WhatsApp ad in Meta and messages you. Whatsable does not create the ad. The first inbound carries the click and the ad — the referral — so you can save them. This page is the map: where that referral lands, what each field is, and why you persist ctwa_clid and source_id yourself before later messages in the same chat drop them.
No. A Click-to-WhatsApp ad runs in Meta Ads. Whatsable does not create the ad.
Whatsable forwards first-inbound referral — top-level on n8n, Zapier, Make, and a webhook you created. You persist ctwa_clid and source_id yourself because later messages in the same chat usually omit them. Whatsable does not persist them for you.
Status ads can also send a referral; ctwa_clid may be omitted.
Here's the sequence, start to finish:
incoming: true when you create it.referral to that URL.That's the core loop for any destination. The specifics of where you point it differ slightly by tool:
In the Whatsable dashboard, open Developer, add an endpoint URL, and enable incoming. The first Click-to-WhatsApp inbound POSTs the referral to that URL. See https://whatsable.app/integrations/webhook
n8n gets the same first-inbound referral. Map the top-level referral on that inbound, persist ctwa_clid and source_id, and write both to a Sheet or a CRM. Setup docs: https://whatsable.app/integrations/n8n
Zapier gets the same first-inbound referral. Map the top-level referral, persist ctwa_clid and source_id yourself. Docs: https://whatsable.app/integrations/zapier
Make gets the same first-inbound referral. Map the top-level referral, persist ctwa_clid and source_id yourself. Docs: https://whatsable.app/integrations/make
A Whatsable Agent Skill is not a separate event. It sees the same webhook payload, including the referral, only if that Skill sits on a webhook you created. Installing a Skill by itself doesn't deliver the referral. See https://whatsable.app/vibe-code
Yes on the first inbound. Usually gone after that.
| When | Present / absent |
|---|---|
| First inbound after CTWA ad/post tap | Yes typically |
| Later messages, same chat | Usually absent. Persist immediately |
| Ordinary chat | Absent |
| WhatsApp Status ads | Referral may be present; ctwa_clid may be omitted |
Top-level referral on the Whatsable payload (or Cloud API messages[].referral if that's the envelope you get). Do not map that unless that is the delivery. Use every row below.
| Field | Plain meaning | Present / absent |
|---|---|---|
referral | Container for CTWA/post attribution. | First CTWA/post inbound; omit ordinary chat and most follow-ups |
referral.source_type | ad or post. | With referral |
referral.source_id | Meta ad or post ID. | With referral. Persist |
referral.source_url | Ad or post URL. | With referral |
referral.headline | Ad or post headline. | With referral |
referral.body | Ad or post body copy. | With referral |
referral.media_type | image or video. | With referral |
referral.image_url | Image creative URL. | When media_type is image (URLs can expire) |
referral.video_url | Video creative URL. | When media_type is video |
referral.thumbnail_url | Video thumbnail URL. | Video creatives |
referral.ctwa_clid | Click ID for Meta CAPI. | Usually with ad referral; Status may omit. Persist |
referral.welcome_message | Optional object. Welcome message when Meta includes it. | Optional; nested keys unverified. Do not invent children. |
The Ad card you see in the Whatsable inbox is chrome. It reads from the same referral fields above; it is not a new set of fields, and Whatsable does not create the ad or persist these for you.
| What you see | Maps to |
|---|---|
| Ad preview | Creative (image_url / video_url / thumbnail) |
| See Ad | Inbox control |
| Source ID | source_id |
| Media type | media_type |
| Source type | source_type |
| Headline / body | headline / body |
| Customer's first line | last_message_of_user |
last_message_of_user is a same-event message field, not part of referral. It already exists on the payload; this row only maps it to the card you see.
ctwa_clid and source_id?You do. Whatsable forwards first-inbound referral. You persist ctwa_clid and source_id yourself because later messages in the same chat usually omit them. Whatsable does not persist them for the customer.
Status ads can also send a referral; ctwa_clid may be omitted. That is still a referral — do not treat Status ads as unrelated to this page.
Write those fields to a Sheet or CRM, then report which creative and which platform produced the WhatsApp lead.
The first inbound hits n8n, Zapier, Make, or a webhook you created. You persist `source_id` on the contact yourself, so the next person who opens the chat can see which Meta ad started it.
The same first inbound appends `ctwa_clid` and `source_id`. You persist those two yourself, then group the week by ad.
Ads Manager saw the click. WhatsApp saw the chat. The first-inbound referral is the join — only if you persisted it.
Sibling blog on the referral. This page owns the full field table and the inbox Ad card mapping.
Developer → add an endpoint URL → enable incoming. The first CTWA inbound POSTs referral to that URL.
Same first-inbound referral. Map top-level referral, persist ctwa_clid and source_id yourself.
Same first-inbound referral on the Zapier trigger.
Same first-inbound referral on the Make trigger.
Agent Skill only if it sits on a webhook you created.