Ads and Commerce

Effective status

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 effective_status webhook notifies you when the delivery status of a campaign, ad set, or ad changes. Effective status reflects whether an object is actually delivering, taking into account its own status and the status of its parents. It changes when an ad is rejected in review, when delivery is blocked or resumes, or when a status change on a parent cascades down to its active children.
Unlike the other ad_account webhooks, effective_status reports the change through the shared field_changed field and lists the affected field in changed_fields. A single subscription covers status changes at the campaign, ad set, and ad levels.

Webhook payload

{
  "object": "ad_account",
  "entry": [
    {
      "id": "<AD_ACCOUNT_ID>",
      "time": 1782862117,
      "changes": [
        {
          "field": "field_changed",
          "value": {
            "object_id": "<OBJECT_ID>",
            "object_type": "ad",
            "changed_fields": ["effective_status"]
          }
        }
      ]
    }
  ]
}
object_type is one of campaign, adset, or ad, identifying which level in the ad hierarchy changed. The payload tells you that the effective status changed but not the new value. Poll the object to read it.

Poll for more context

Request the status and the context you need to decide what to do:
GET /<OBJECT_ID>?fields=effective_status,configured_status,review_feedback,creative{id,name,thumbnail_url,effective_object_story_id},adset{id,name,daily_budget,status},campaign{id,name,status,daily_budget,spend_cap}

Why these fields

  • effective_status -- the new delivery status that triggered the webhook.
  • configured_status -- distinguishes a status you set from one the system set, so you can tell “I paused it” from “it was paused for me.”
  • review_feedback -- when an ad is disapproved, the rejection reason you need to fix it.
  • creative{...} -- identifies which creative passed or failed review.
  • adset and campaign -- budget and parent context for escalation decisions.

Example actions

Disapproved: fix the creative and resubmit.
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>"
Spending limit reached: raise the account spend cap.
curl -X POST "https://graph.facebook.com/<API_VERSION>/act_<AD_ACCOUNT_ID>" \
  -d "spend_cap=50000000" \
  -d "access_token=<ACCESS_TOKEN>"
Approved: activate the ad set and scale its budget.
curl -X POST "https://graph.facebook.com/<API_VERSION>/<ADSET_ID>" \
  -d "status=ACTIVE" \
  -d "access_token=<ACCESS_TOKEN>"

curl -X POST "https://graph.facebook.com/<API_VERSION>/<CAMPAIGN_ID>" \
  -d "daily_budget=1500000" \
  -d "access_token=<ACCESS_TOKEN>"