Ad referrals (CTWA)
Lists the linked number’s inbound messages that arrived from a Click-to-WhatsApp ad or post, newest first. In practice only official API (Meta) numbers carry an ad origin: the referral block is a Cloud API webhook field.
Meta sends the origin on the first message of the conversation only and never repeats it, so each item here amounts to one conversation that started from that ad.
referral.sourceId is Meta’s ad (or post) id, exposed as an opaque grouping key. There is no campaign or adset name here and that is not an omission: reading the ad object (GET /{ad_id}?fields=id,name,adset{id,name},campaign{id,name}) requires the ads_read permission on the advertiser’s ad account, and the WhatsApp system-user token behind a connected number carries only whatsapp_business_management and whatsapp_business_messaging. To resolve names, call the Meta Marketing API yourself with a token authorised on that ad account, using this sourceId.
Privacy (PII): on a redacted row the ad identity survives (sourceId, sourceType) while ctwaClid, headline and body come back null and redacted: true is set — an ad id identifies a creative, never a person, so attribution keeps working on a RELAY_ONLY number instead of returning nothing.
Requires a number-scoped key.
The referral object also carries the RESOLVED names of the ad — adName, adsetId, adsetName, campaignId, campaignName — plus namesResolvedAt.
⚠️ Those six come back null unless the advertiser has shared that ad account with the Pilot Status business portfolio as a partner. A null name is a SUPPORTED state, not an error: the conversation is still counted and sourceId is still returned.
No endpoint resolves a name on demand — resolution happens asynchronously, off the request path, so querying never triggers a Marketing API call and a null can become a name minutes later with nothing done on your side. namesResolvedAt is what makes that observable: null means “not resolved yet”, while a timestamp with null names means “we asked and Meta returned nothing” (deleted ad, or sharing not granted).
Authorizations
Your ps_ API key
Query Parameters
Filter to a single ad/post id. (string)
Filter by origin type: "ad" or "post". (string ("ad" | "post"))
Start of the date range (over providerTimestamp). Must be ≤ endDate. (string (ISO 8601))
End of the date range (over providerTimestamp). (string (ISO 8601))
Page (default 1). (integer (≥1))
Items per page (default 30, max 100). (integer (1–100))
Response
List ad referrals