NEWASK is live: the AI brain that answers anything about your business.Meet ASK →
Blog/ctwa_clid Explained
WhatsApp

ctwa_clid Explained: Meta's Click-to-WhatsApp Click ID

7 day free trialNo credit card requiredSet up in 5 minutes
Direct answer

ctwa_clid is the click identifier Meta generates when someone taps an ad that clicks to WhatsApp. It arrives inside the referral object on the inbound message webhook, and Meta's Conversions API accepts it unhashed inside user_data so a later conversion can be credited to that specific ad click.

Click-to-WhatsApp is the only Meta messaging destination that hands the advertiser a genuine click identifier. That single fact shapes everything about how WhatsApp funnels are measured, and it is repeatedly described wrongly in secondary sources. This page quotes Meta's own documentation for each claim, and says plainly where Meta documents nothing at all.

What is ctwa_clid?

ctwa_clid is a per-click identifier that Meta exposes to the business when a WhatsApp conversation starts from a click-to-WhatsApp ad. Meta's Conversions API guide defines it directly:

"The Click-to-WhatsApp Click ID (ctwa_clid) is a personal identifier, unique per click, that is exposed to the business when the user entering the conversation originated from a click to WhatsApp ad. This identifier needs to be sent back to Meta via the Conversions API call"

Meta, Conversions API for Business Messaging. developers.facebook.com/documentation/ads-commerce/conversions-api/business-messaging. Page shows "Updated: May 5, 2026". Checked 14 August 2026.

Two words in that sentence carry weight. Unique per click means it identifies a click event, not a person and not a conversation. And personal identifier is Meta's own classification, which is worth remembering when you decide where to store it and how long to keep it.

Where does ctwa_clid appear?

Inside the referral object on the inbound message webhook, and only when the message came from a click-to-WhatsApp ad. Meta's schema reference is unambiguous about the condition.

On the ReferralObject: "Only included if message via a Click to WhatsApp ad."

On the ctwa_clid property itself: "Ad click ID."

Meta, WhatsApp incoming webhook payload reference. developers.facebook.com/documentation/business-messaging/whatsapp/reference/webhooks/whatsapp-incoming-webhook-payload. Checked 14 August 2026.

The per-message-type references carry the same condition as an inline comment in the payload syntax. On the text message webhook reference, Meta annotates the block with <!-- only included if message sent via a Click to WhatsApp ad -->, and describes the trigger as "A WhatsApp user sends a text message to a business via a Click to WhatsApp ad (an ad with a WhatsApp message destination)."

The full referral object

The referral object is worth reading in full, because ctwa_clid is only one of eleven fields and several of the others are useful for reporting without any Conversions API work at all.

PropertyTypeMeta's description
source_urlstring"Ad URL."
source_idstring"Ad ID."
source_typead or postNo description given
bodystring"Ad primary text."
headlinestring"Ad headline."
media_typeimage or videoNo description given
image_urlstring"Only included for image media_type."
video_urlstring"Only included for video media_type."
thumbnail_urlstring"Only included for video media_type."
ctwa_clidstring"Ad click ID."
welcome_messageobjectNo description given

Notice source_id, which Meta describes simply as "Ad ID." That gives you creative-level reporting inside your own inbox with no Conversions API integration whatsoever. If all you want is to know which creative produced which conversation, the referral object alone is enough. ctwa_clid is what you need additionally when you want Meta itself to learn from the outcome.

How do you send ctwa_clid back to Meta?

As an unhashed field inside user_data, on an event with action_source set to business_messaging and messaging_channel set to whatsapp. Meta's documented WhatsApp payload has this shape:

{
  "data": [
    {
      "event_name": "Purchase",
      "event_time": 1675999999,
      "action_source": "business_messaging",
      "messaging_channel": "whatsapp",
      "user_data": {
        "whatsapp_business_account_id": <WHATSAPP_BUSINESS_ACCOUNT_ID>,
        "ctwa_clid": "<CLICK_TO_WHATSAPP_CLICK_ID>"
      },
      "custom_data": {
        "currency": "USD",
        "value": 123
      }
    }
  ],
  "partner_agent": "<PARTNER_NAME>"
}

Two details trip people up. First, ctwa_clid belongs in user_data, not in custom_data, and there is no page_id on the WhatsApp path. Second, it must not be hashed. Meta's customer information parameters reference lists it alongside the other pass-through identifiers:

"ctwa_clid string Do not hash. Click ID generated by Meta for ads that click to WhatsApp."

Meta, Customer Information Parameters. developers.facebook.com/documentation/ads-commerce/conversions-api/parameters/customer-information-parameters. Page shows "Updated: Jan 9, 2026". Checked 14 August 2026.

SHA-256 hashing a ctwa_clid out of caution is a common and silent failure. The request is accepted, the event is recorded, and it matches nothing. If you are unsure whether a payload is shaped correctly, our free Conversions API payload validator checks this exact class of mistake in the browser.

Which events can you send from a WhatsApp conversation?

Fourteen, and Meta lists them explicitly: Purchase, LeadSubmitted, InitiateCheckout, AddToCart, ViewContent, OrderCreated, OrderShipped, OrderDelivered, OrderCanceled, OrderReturned, CartAbandoned, QualifiedLead, RatingProvided and ReviewProvided.

Meta also constrains what those events are allowed to represent:

"Please note that messaging events should only represent customer interactions that occur in the messaging thread, not conversions that occur on other channels like websites."

Meta, Conversions API for Business Messaging. developers.facebook.com/documentation/ads-commerce/conversions-api/business-messaging. Page shows "Updated: May 5, 2026". Checked 14 August 2026.

That is a real design constraint, not a formality. If a WhatsApp conversation ends with the customer buying on your website, the purchase is a website event with a website action_source, and the messaging channel gets the in-thread milestone instead, typically QualifiedLead or LeadSubmitted. Sending the website purchase as a business messaging event misrepresents where it happened.

WhatsApp conversations, attributed to the ad

FlowTracker captures the referral object on every inbound message, stores ctwa_clid against the conversation, and returns matched conversions through the Conversions API with the correct action source and messaging channel.

Start 7 day free trial

How long is ctwa_clid valid?

Meta does not publish a validity period for ctwa_clid. We looked, and we are not going to invent one. What Meta does document is a hard limit on the Conversions API itself, and in practice that limit governs.

Across the Conversions API for Business Messaging guide, the customer information parameters reference, the WhatsApp webhook references, the incoming webhook payload schema and the ads that click to WhatsApp guide, Meta states no expiry, no lookback and no attribution window for ctwa_clid. The nearest thing to guidance is an instruction to persist it yourself:

"Upon receiving the ctwa_clid, store it with the conversation. When a conversion has happened within a conversation, send the corresponding ctwa_clid via the Conversions API."

Meta, Conversions API for Business Messaging. developers.facebook.com/documentation/ads-commerce/conversions-api/business-messaging. Page shows "Updated: May 5, 2026". Checked 14 August 2026.

The binding constraint is elsewhere, and it is documented precisely. Meta's server event parameters reference states:

"The event_time can be up to 7 days before you send an event to Facebook. If any event_time in data is greater than 7 days in the past, we return an error for the entire request and process no events."

Meta, Server Event Parameters. developers.facebook.com/documentation/ads-commerce/conversions-api/parameters/server-event. Page shows "Updated: Feb 12, 2026". Checked 14 August 2026.

So the practical rule is not "how old can the click be" but "how old can the event be". You may hold a ctwa_clid for months; you may not send an event whose event_time is more than seven days old, and if you try, the entire batch is rejected rather than the offending row. How that compares with Google Ads and TikTok is covered in conversion upload windows compared.

Stated honestly

Meta also never explicitly states that ctwa_clid appears only on the first inbound message of a conversation. The instruction to "store it with the conversation" strongly implies it, and that is how implementations behave in practice, but it is an inference rather than a quotation. Build as though it arrives once, and persist it.

When is ctwa_clid missing?

In four documented situations, and treating each as a bug rather than an expected state wastes a great deal of debugging time.

Does Messenger or Instagram have a ctwa_clid?

No. WhatsApp is the only Meta messaging surface with a click identifier. Messenger and Instagram both deliver a referral object carrying ref and ad_id instead, and the Conversions API identifies the person by a scoped user ID rather than by a click.

Destinationmessaging_channelIdentifying fields in user_dataClick ID?
WhatsAppwhatsappwhatsapp_business_account_id, ctwa_clidYes
Messengermessengerpage_id, page_scoped_user_idNo
Instagraminstagraminstagram_business_account_id, ig_sidNo

Field names as documented in Meta's Conversions API for Business Messaging guide and customer information parameters reference, checked 14 August 2026.

The consequences of that asymmetry are larger than they look, and they are worked through in click to WhatsApp, Messenger and Instagram: which identifier you actually get.

What ctwa_clid does not cover

It is a click identifier, not an attribution system. Three limits are worth stating before you build reporting on top of it.

Used within those limits, ctwa_clid is the cleanest identifier in messaging advertising: a documented, per-click, first-party value that Meta hands you and then accepts back. It is the reason WhatsApp ad tracking is technically easier than Telegram ad tracking, where no platform-issued identifier crosses the boundary at all.

Sources

Every link below was fetched and read on 14 August 2026. Where a vendor does not document something, this article says so rather than filling the gap with an estimate.

Meta, Conversions API for Business MessagingSource for the definition of ctwa_clid, the WhatsApp payload shape, the supported event list, the instruction to store the identifier with the conversation, the On-Premises 2.45.1 requirement and the statement that Meta does not assist with deduplication. Page shows "Updated: May 5, 2026". developers.facebook.com/documentation/ads-commerce/conversions-api/business-messaging. Checked 14 August 2026.
Meta, WhatsApp incoming webhook payload referenceSource for the full referral object field list and the condition "Only included if message via a Click to WhatsApp ad." developers.facebook.com/documentation/business-messaging/whatsapp/reference/webhooks/whatsapp-incoming-webhook-payload. Checked 14 August 2026.
Meta, WhatsApp text message webhook referenceSource for the WhatsApp Status omission and the click-to-WhatsApp trigger description. Page shows "Updated: May 21, 2026". developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/reference/messages/text. Checked 14 August 2026.
Meta, Customer Information ParametersSource for "Do not hash" on ctwa_clid, and for the Messenger and Instagram identifier fields. Page shows "Updated: Jan 9, 2026". developers.facebook.com/documentation/ads-commerce/conversions-api/parameters/customer-information-parameters. Checked 14 August 2026.
Meta, Server Event ParametersSource for the seven day event_time limit and the whole-request rejection behaviour. Page shows "Updated: Feb 12, 2026". developers.facebook.com/documentation/ads-commerce/conversions-api/parameters/server-event. Checked 14 August 2026.
Meta, Automatic Events APISource for the statement that automatic event identification is unavailable in the European Union, United Kingdom and Japan. developers.facebook.com/documentation/business-messaging/whatsapp/embedded-signup/automatic-events-api. Checked 14 August 2026.
Documented gapMeta publishes no validity period, expiry or lookback window for ctwa_clid, and no explicit statement that it appears only on the first inbound message. Both points are flagged in the article as inference rather than quotation. If Meta publishes either, this page will be updated and the review date changed.

Last reviewed 14 August 2026

WhatsApp Attribution

Every WhatsApp conversation, tied to its ad

FlowTracker stores the referral object on first contact and returns matched conversions to Meta with the right action source, channel and click identifier.

FAQ

WhatsApp Attribution, answered

What is ctwa_clid?

ctwa_clid is Meta's click-to-WhatsApp click identifier. Meta defines it as "a personal identifier, unique per click, that is exposed to the business when the user entering the conversation originated from a click to WhatsApp ad". It arrives in the referral object of the inbound message webhook and is sent back through the Conversions API to attribute a later conversion to that ad click.

Where do I find ctwa_clid?

In the referral object on the inbound WhatsApp message webhook. Meta's schema reference labels the ReferralObject "Only included if message via a Click to WhatsApp ad" and describes the ctwa_clid property simply as "Ad click ID." The same object also carries source_id, which Meta describes as "Ad ID."

Should ctwa_clid be hashed before sending it to the Conversions API?

No. Meta's customer information parameters reference lists it as "ctwa_clid string Do not hash. Click ID generated by Meta for ads that click to WhatsApp." Hashing it is a silent failure: the request is accepted and the event matches nothing.

How long does ctwa_clid stay valid?

Meta does not publish a validity period, expiry or lookback window for ctwa_clid anywhere in its developer documentation. The binding constraint in practice is the Conversions API event_time rule: an event_time may be at most 7 days in the past, and a request containing an older one is rejected in its entirety.

Why is ctwa_clid missing from my webhook?

Four documented reasons. The message came from a WhatsApp Status ad placement, where Meta states the property "is omitted entirely". The conversation was organic, so no referral object exists at all. You are on an On-Premises API version below 2.45.1. Or it is a later message in a thread, and you did not persist the value on first sight.

Does Messenger or Instagram have an equivalent of ctwa_clid?

No. WhatsApp is the only Meta messaging destination with a click identifier. Messenger and Instagram deliver a referral object containing ref and ad_id, and the Conversions API identifies the person with page_id plus page_scoped_user_id for Messenger, or instagram_business_account_id plus ig_sid for Instagram.

Which action_source should a WhatsApp conversion use?

business_messaging, with messaging_channel set to whatsapp. Meta's server event parameters reference defines business_messaging as "Conversion was made from ads that click to Messenger, Instagram or WhatsApp." The chat value exists separately and is defined as "Conversion was made via a messaging app, SMS, or online messaging feature."

Can I send a website purchase as a WhatsApp conversion?

Meta says no. Its guidance is that "messaging events should only represent customer interactions that occur in the messaging thread, not conversions that occur on other channels like websites." Send the in-thread milestone as a business messaging event and the website purchase as a website event.

Keep reading