Creative fatigue
Updated: Jul 6, 2026
Copy for LLM
Ads in WhatsApp Status are available via the Marketing API. Learn more about ads in WhatsApp Status.
The
creative_fatigue webhook notifies you when an ad’s creative fatigue level changes. Fatigue rises as an audience sees the same creative repeatedly, which usually shows up as a falling click-through rate and a rising cost per action. The payload carries the new fatigue level and a message describing it, so you can react as soon as a creative starts to wear out.Webhook payload
{ "object": "ad_account", "entry": [ { "id": "<AD_ACCOUNT_ID>", "time": 1782862117, "changes": [ { "field": "creative_fatigue", "value": { "ad_account_id": "<AD_ACCOUNT_ID>", "adgroup_id": "<AD_ID>", "creative_fatigue_level": "HIGH", "creative_fatigue_message": "Your ad fatigue changed from medium to high. To address the fatigued ad, try creating a new ad with different images or videos in the same campaign, expanding your audience, or using Advantage+ creative." } } ] } ] }
| Field | Description |
|---|---|
ad_account_id | The ad account the fatiguing ad belongs to. |
adgroup_id | The ID of the ad whose creative is fatiguing. |
creative_fatigue_level | The new fatigue level: LOW, MEDIUM, or HIGH. |
creative_fatigue_message | A human-readable description of the change and suggested remedies. |
Poll for more context
To diagnose the fatigue before acting, read the recent performance trend for the ad:
GET /<AD_ID>/insights?fields=impressions,frequency,ctr,cpc,actions,cost_per_action_type,date_start,date_stop&date_preset=last_7d&time_increment=1
Then read the creative and audience context to decide what to replace:
GET /<AD_ID>?fields=creative{id,name,image_hash,image_url,body,title},adset{id,name,targeting,daily_budget},status
frequency and ctr day by day show the shape of the decay, cost_per_action_type quantifies how much more expensive the ad is getting, the creative fields identify what to replace, and adset.targeting gives audience-size context.Example actions
Swap in a new creative on the existing ad.
curl -X POST "https://graph.facebook.com/<API_VERSION>/<AD_ID>" \
-d "creative={'creative_id': '<CREATIVE_ID>'}" \
-d "status=ACTIVE" \
-d "access_token=<ACCESS_TOKEN>"
Pause the fatigued ad and launch a refreshed one.
curl -X POST "https://graph.facebook.com/<API_VERSION>/<FATIGUED_AD_ID>" \
-d "status=PAUSED" \
-d "access_token=<ACCESS_TOKEN>"
curl -X POST "https://graph.facebook.com/<API_VERSION>/act_<AD_ACCOUNT_ID>/ads" \
-d "name=<AD_NAME>" \
-d "adset_id=<ADSET_ID>" \
-d "creative={'creative_id': '<CREATIVE_ID>'}" \
-d "status=ACTIVE" \
-d "access_token=<ACCESS_TOKEN>"