Click-to-WhatsApp Ads
Create ads that open a WhatsApp conversation
Click-to-WhatsApp ads
Create ads that, when tapped, open a WhatsApp conversation with your business instead of sending the user to a website. Zernio drives the full hierarchy (campaign → ad set → creative → ad) in a single call. The CTA is locked to WHATSAPP_MESSAGE and the destination is hard-coded to https://api.whatsapp.com/send, Meta resolves the actual WhatsApp number from the Page-to-WhatsApp pairing configured in your Page settings.
Before calling, the Facebook Page must already be paired with a verified WhatsApp Business number (Meta Business Manager → WhatsApp Accounts → connect a Page). When the Page isn't paired, Meta rejects the ad set with subcode 2446886 and Zernio surfaces a clean platform_error envelope.
const result = await zernio.ads.createCtwaAd({ body: {
accountId: 'FB_OR_IG_ACCOUNT_ID',
adAccountId: 'act_123456789',
name: 'Summer promo, WhatsApp',
headline: 'Chat with us on WhatsApp',
body: 'Get a personal quote in 2 minutes.',
imageUrl: 'https://cdn.example.com/promo.jpg',
budgetAmount: 20,
budgetType: 'daily',
currency: 'USD',
countries: ['US', 'ES'],
}});result = client.ads.create_ctwa_ad(
account_id="FB_OR_IG_ACCOUNT_ID",
ad_account_id="act_123456789",
name="Summer promo, WhatsApp",
headline="Chat with us on WhatsApp",
body="Get a personal quote in 2 minutes.",
image_url="https://cdn.example.com/promo.jpg",
budget_amount=20,
budget_type="daily",
currency="USD",
countries=["US", "ES"],
)curl -X POST "https://zernio.com/api/v1/ads/ctwa" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "FB_OR_IG_ACCOUNT_ID",
"adAccountId": "act_123456789",
"name": "Summer promo, WhatsApp",
"headline": "Chat with us on WhatsApp",
"body": "Get a personal quote in 2 minutes.",
"imageUrl": "https://cdn.example.com/promo.jpg",
"budgetAmount": 20,
"budgetType": "daily",
"currency": "USD",
"countries": ["US", "ES"]
}'To close the attribution loop on conversions that happen inside the WhatsApp thread, see Conversions API for Business Messaging on the WhatsApp page.
Local CTWA targeting (city radius, regions, ZIPs)
CTWA accepts the full geo-targeting shape, not just countries. For local businesses (e.g. a 25km radius around Milan), pass cities, regions, zips, metros, or customLocations alongside or instead of countries. Same wire shape as /v1/ads/create, keys come from /v1/ads/targeting/search.
const result = await zernio.ads.createCtwaAd({ body: {
accountId: 'FB_OR_IG_ACCOUNT_ID',
adAccountId: 'act_123456789',
name: 'Milano local CTWA',
headline: 'Chat with us on WhatsApp',
body: 'Get a personal quote in 2 minutes.',
imageUrl: 'https://cdn.example.com/promo.jpg',
budgetAmount: 20,
budgetType: 'daily',
currency: 'EUR',
countries: ['IT'],
cities: [{ key: '2643743', radius: 25, distance_unit: 'kilometer' }],
dsaBeneficiary: 'Acme Srl',
dsaPayor: 'Acme Srl',
}});result = client.ads.create_ctwa_ad(
account_id="FB_OR_IG_ACCOUNT_ID",
ad_account_id="act_123456789",
name="Milano local CTWA",
headline="Chat with us on WhatsApp",
body="Get a personal quote in 2 minutes.",
image_url="https://cdn.example.com/promo.jpg",
budget_amount=20,
budget_type="daily",
currency="EUR",
countries=["IT"],
cities=[{"key": "2643743", "radius": 25, "distance_unit": "kilometer"}],
dsa_beneficiary="Acme Srl",
dsa_payor="Acme Srl",
)curl -X POST "https://zernio.com/api/v1/ads/ctwa" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"accountId": "FB_OR_IG_ACCOUNT_ID",
"adAccountId": "act_123456789",
"name": "Milano local CTWA",
"headline": "Chat with us on WhatsApp",
"body": "Get a personal quote in 2 minutes.",
"imageUrl": "https://cdn.example.com/promo.jpg",
"budgetAmount": 20,
"budgetType": "daily",
"currency": "EUR",
"countries": ["IT"],
"cities": [{ "key": "2643743", "radius": 25, "distance_unit": "kilometer" }],
"dsaBeneficiary": "Acme Srl",
"dsaPayor": "Acme Srl"
}'The legacy countries: ['US'] default only kicks in when no geo at all is supplied. If you pass cities (or any other sub-country geo) without countries, Zernio targets exactly that geo, not US.