---
title: "Ad Updated"
method: POST
path: "ad.updated"
tags: ["Ads"]
---

# Ad Updated

`POST ad.updated` (webhook)

Sent when an ad's status or delivery_status changes, including the in_review and rejected verdicts from ad review. previous_attributes carries the values they changed from; the payload carries no performance stats

Required permissions:
 - `webhook_receive:ads`

## Headers

- `webhook-id` string, required — A unique identifier for this webhook request
- `webhook-signature` string, required — The signature of the webhook request with the webhook version prepended
- `webhook-timestamp` string, required — The timestamp in seconds since the Unix epoch that the webhook was sent at on the server

## Payload

- object
  - `account_id` string, nullable — The account ID that this webhook event is associated with
  - `api_version` 'v1', required — The API version for this webhook
  - `api_version_date` string, nullable, required — The dated API version (Api-Version-Date) the payload is serialized to
  - `data` object, required
    - `ad_campaign` AdEntityReference, required
      - `id` string, required — The referenced entity's id.
    - `ad_group` AdEntityReference, required
      - `id` string, required — The referenced entity's id.
    - `call_to_action` 'learn_more' | 'shop_now' | 'sign_up' | 'subscribe' | 'get_started' | 'book_now' | 'apply_now' | 'contact_us' | 'download' | 'order_now' | 'buy_now' | 'get_quote' | 'message_page' | 'whatsapp_message' | 'instagram_message' | 'call_now' | 'get_directions' | 'send_updates' | 'get_offer' | 'watch_more' | 'listen_now' | 'play_game' | 'open_link' | 'no_button' | 'get_offer_view' | 'get_event_tickets' | 'see_menu' | 'request_time' | 'event_rsvp' | 'see_details' | 'view_instagram_profile' | 'null', nullable, required — The call-to-action button shown on the ad.
    - `created_at` string, required — When the ad was created, as an ISO 8601 timestamp.
    - `creatives` AdCreative[], required
      - `crop` AdCreativeCrop, required
        - `height` number, required — Height of the crop window in source pixels.
        - `width` number, required — Width of the crop window in source pixels.
        - `x` number, required — Left edge of the crop window in source pixels.
        - `y` number, required — Top edge of the crop window in source pixels.
      - `format` 'square' | 'vertical' | 'horizontal' | 'null', nullable, required — The placement variant this asset covers, or null for the original asset.
      - `id` string, required — The creative attachment's file id.
      - `media_type` string, nullable, required — The kind of asset, image or video.
      - `url` string, nullable, required — CDN url of the asset.
    - `delivery_status` 'rejected' | 'in_review' | 'draft' | 'campaign_paused' | 'ad_group_paused' | 'paused' | 'processing' | 'issues' | 'scheduled' | 'learning_limited' | 'learning' | 'active', required — Whether the ad is delivering right now, and if not, why. When several states apply at once, the highest-precedence one is returned.
    - `descriptions` string[], required
    - `existing_post_id` string, nullable, required — The post you pointed this ad at, when it promotes one you already published — a Facebook post, Instagram media, or TikTok video ID. `null` when the ad uses uploaded creatives.
    - `headlines` string[], required
    - `id` string, required — Unique identifier for the ad, prefixed `ad_`.
    - `issues` AdPlatformIssue[], required
      - `id` string, required — Unique identifier for the issue.
      - `message` string, required — A description of what the issue is and how it can be resolved.
      - `resource_id` string, nullable, required — The ID of the campaign, ad group, or ad the issue is attached to.
      - `resource_type` 'ad_campaign' | 'ad_group' | 'ad', required — The type of resource the issue is attached to.
    - `lead_form` AdLeadForm
      - `completion` AdLeadFormCompletion, required
        - `button_text` string, nullable, required — Text of the follow-up button.
        - `description` string, nullable, required — Body text under the headline.
        - `headline` string, nullable, required — Headline of the completion screen.
        - `url` string, nullable, required — Website the follow-up button opens. `null` when the screen has no button.
      - `disclaimer` AdLeadFormDisclaimer, required
        - `body` string, nullable, required — Disclaimer text.
        - `checkboxes` AdLeadFormDisclaimerCheckbox[], required
          - `checked_by_default` boolean, nullable, required — Whether the checkbox starts ticked.
          - `key` string, nullable, required — Stable identifier consent responses are stored under.
          - `required` boolean, nullable, required — Whether the checkbox must be ticked to submit the form.
          - `text` string, required — Consent text next to the checkbox.
        - `title` string, nullable, required — Disclaimer title.
      - `form_type` 'more_volume' | 'higher_intent', required — `more_volume` is quickest to submit; `higher_intent` adds a confirmation step before submission.
      - `intro` AdLeadFormIntro, required
        - `description` string, nullable, required — Body text under the headline.
        - `headline` string, nullable, required — Headline of the intro screen.
      - `name` string, nullable, required — Internal name of the form.
      - `phone_verification` boolean, required — Whether the phone number must be verified by SMS before submitting.
      - `privacy_policy` AdLeadFormPrivacyPolicy, required
        - `link_text` string, nullable, required — Link text shown for the policy. `null` uses the platform default.
        - `url` string, required — URL of your privacy policy.
      - `questions` AdLeadFormQuestion[], required
        - `format` string — Answer format for `custom` questions: `short_answer`, `multiple_choice`, or `appointment`. Absent otherwise.
        - `label` string — Question text for `custom` questions. Absent for standard prefill questions.
        - `options` AdLeadFormQuestionOption[]
          - `key` string, nullable — Stable identifier the choice's answers are stored under. Absent for simple choices.
          - `logic` AdLeadFormOptionLogic
            - `action` 'go_to_question' | 'submit_form' | 'close_form', required — What happens when the choice is selected.
            - `target_end_page_index` number — Zero-based index of the ending screen to jump to.
            - `target_question_index` number — Zero-based index of the question to jump to, for `go_to_question`.
          - `value` string, required — Choice text shown to the person.
        - `type` string, required — Question type: a standard prefill type such as `email`, `phone`, or `full_name`, or `custom` for your own question.
    - `lead_form_id` string, nullable — The ad platform's ID for the instant form the ad uses. Set when the ad references an existing form via `lead_form_id`, or once a form built from `lead_form` has been created on the platform.
    - `messaging_config` AdMessagingConfig
      - `keyword` string, nullable, required — Suggested reply the person can tap to start the conversation.
      - `message` string, nullable, required — Greeting shown when the conversation opens.
    - `multi_advertiser_ads` boolean — Whether the ad can appear alongside other advertisers' ads in the same unit. Defaults to true.
    - `music` AdMusic
      - `id` string, required — The music attachment's file id.
      - `name` string, nullable, required — The uploaded file's name.
      - `url` string, nullable, required — CDN url of the MP3.
    - `post_id` string, nullable, required — The post the ad network serves for this ad, as `pageID_postID` on Meta — the post Meta created for an uploaded creative, or the post being promoted. Use it to open the live post, or to promote the same post from another ad. `null` until the network has created the post.
    - `post_source` 'facebook' | 'instagram' | 'null', nullable, required — Identifies the network that owns `existing_post_id`; `null` when the ad uses uploaded creatives.
    - `post_thumbnail_url` string, nullable, required — Preview image of the post named by `existing_post_id`. `null` for ads that use uploaded creatives, or until the post's media has been fetched from the network.
    - `primary_texts` string[], required
    - `social_accounts` AdEntityReference[], required
      - `id` string, required — The referenced entity's id.
    - `status` 'active' | 'paused' | 'in_review' | 'rejected', required — Whether the ad is enabled. `active` and `paused` are set by you; `in_review` and `rejected` come from ad review.
    - `title` string, nullable, required — Display title of the ad.
    - `updated_at` string, required — When the ad was last updated, as an ISO 8601 timestamp.
    - `url` string, nullable, required — The URL the ad links to, without its query string. Parameters belong in `url_parameters`; any you send on `url` are moved there.
    - `url_parameters` object, required — Every query parameter appended to the URL, keyed by parameter name — including any you sent on `url` itself. Whop adds its own click-attribution parameters on top; those are reserved and rejected if you set them. Which keys are reserved depends on the ad's network — Meta: utm_meta_ad_id, utm_meta_adset_id, utm_meta_campaign_id, utm_source, utm_placement, utm_medium, utm_content, utm_adset, utm_whop, wacid, wasid, waid, tw_source, tw_adid; TikTok: waid, wasid, wacid, ad_id, adset_id, campaign_id, utm_source, utm_medium, utm_placement, utm_whop, tw_source, tw_adid.
  - `id` string, required — A unique ID for every single webhook request
  - `previous_attributes` object — For some `.updated` events, the old values of the payload fields that changed, keyed by field name. Omitted when no capture is available for the event
  - `timestamp` string, date-time, required — The timestamp in ISO 8601 format that the webhook was sent at on the server
  - `type` 'ad.updated', required — The webhook event type

## Acknowledgement `200`

Return a 200 status to indicate that the data was received successfully

---

[API](https://skmtc.dev/whop/apis/whop-api.md) · [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc.dev/whop/apis/whop-api/revisions/ef86d14ef691?raw)
