Ad Campaigns

Update an Ad Campaign

Updates an ad campaign's editable fields (title, budget, schedule, bid strategy, and — before launch — budget optimization), and launches a draft campaign by setting status to active. Objective, budget type, special ad categories and desired cost per result are fixed at creation and cannot be changed.

patch/ad_campaigns/{id}

Request body

bid_type'minimum_cost' | 'average_target' | 'maximum_target'

CBO bid strategy: minimum_cost (lowest cost), average_target (cost cap), or maximum_target (bid cap). Switching to minimum_cost clears the cap amounts stored on the campaign's ad groups. CBO only.

budget_amountnumber

The campaign budget, in the account's currency. Interpreted as daily or lifetime per the campaign's existing budget type.

budget_optimization'ad_campaign' | 'ad_group'

Which level owns the budget — the campaign (CBO) or each ad group (ABO). Only changeable before the campaign is live on Meta; switching to ad_campaign requires budget_amount in the same request, and switching to ad_group clears the campaign budget.

ends_atstring

Campaign schedule end (ISO 8601). CBO only.

starts_atstring

Campaign schedule start (ISO 8601). CBO only.

status'active'

Set to active to launch a draft campaign (moderates and pushes it live). Live-campaign pause and resume use the pause and unpause actions.

titlestring

The name of the campaign.

Response

ad campaign updated

added_to_cartsnumber required

Whop pixel-attributed add-to-cart events, last-click.

bid_type'minimum_cost' | 'average_target' | 'maximum_target' | 'null' nullable required

The bidding strategy the campaign uses.

budget_amountnumber nullable required

The campaign budget in USD. Null when budget is set at the ad group level (ABO).

budget_optimization'ad_campaign' | 'ad_group' | 'null' nullable required

Which level owns the budget — the campaign (CBO) or each ad group (ABO).

budget_type'daily' | 'lifetime' | 'null' nullable required

Whether the budget is spent per day or over the campaign's lifetime.

click_through_ratenumber required

Clicks divided by impressions, between 0 and 1.

clicksnumber required

The number of clicks.

completed_registrationsnumber required

Whop pixel-attributed complete-registration events, last-click.

contactsnumber required

Whop pixel-attributed contact events, last-click.

cost_per_added_to_cartnumber nullable required

Spend divided by attributed add-to-cart events; null when they are not the goal and none are attributed.

cost_per_clicknumber required

Spend divided by clicks; 0 when there are no clicks.

cost_per_completed_registrationnumber nullable required

Spend divided by attributed complete-registration events; null when they are not the goal and none are attributed.

cost_per_contactnumber nullable required

Spend divided by attributed contact events; null when contacts are not the goal and none are attributed.

cost_per_leadnumber nullable required

Spend divided by attributed leads; null when leads are not a goal and none are attributed.

cost_per_millenumber required

Spend per 1,000 impressions; 0 when there are no impressions.

cost_per_purchasenumber nullable required

Spend divided by attributed purchases; null when purchases are not a goal and none are attributed.

cost_per_resultnumber nullable required

Spend divided by Whop pixel-attributed results; null when nothing Whop-attributable is being optimized for.

cost_per_schedulenumber nullable required

Spend divided by attributed schedule events; null when schedules are not the goal and none are attributed.

cost_per_submitted_applicationnumber nullable required

Spend divided by attributed submit-application events; null when they are not the goal and none are attributed.

cost_per_viewed_contentnumber nullable required

Spend divided by attributed view-content events; null when they are not the goal and none are attributed.

created_atstring required

When the campaign was created, as an ISO 8601 timestamp.

custom_conversionsnumber required

Whop pixel-attributed custom (merchant-defined) conversion events, last-click, across all custom event names.

custom_event_countsobject required

Whop pixel-attributed custom conversions broken out by merchant-defined event name, last-click, as a { event_name => count } map over the stats window. Empty when no named custom events are attributed. Custom events fired without a name are counted in custom_conversions but omitted here, so these values sum to at most custom_conversions.

delivery_status'payment_failed' | 'all_ads_rejected' | 'draft' | 'no_ad_groups' | 'no_ads' | 'paused' | 'processing' | 'issues' | 'scheduled' | 'completed' | 'ad_groups_off' | 'active' required

The current delivery state, mirroring the Delivery column in the ads dashboard. When several states apply at once, the highest-precedence one is returned.

frequencynumber nullable required

Platform-reported impressions divided by reach.

idstring required

Unique identifier for the ad campaign.

impressionsnumber required

The number of impressions.

leadsnumber required

Whop pixel-attributed leads, last-click.

objective'awareness' | 'traffic' | 'engagement' | 'leads' | 'sales' | 'null' nullable required

The goal the campaign optimizes toward.

optimization_goalstring nullable required

The specific event the campaign optimizes for. If the campaign is CBO, then all ad groups will have the same optimization goal, which will be returned here.

platform'meta' required

The ad network the campaign runs on.

purchase_valuenumber required

USD value of pixel-attributed purchases.

purchasesnumber required

Whop pixel-attributed purchases, last-click.

reachnumber required

The number of unique people who saw this.

result_event'purchase' | 'lead' | 'schedule' | 'submit_application' | 'contact' | 'complete_registration' | 'view_content' | 'add_to_cart' | 'custom' | 'null' nullable required

The Whop pixel conversion event whose attributed count represents results — the optimization goal, or the highest-volume attributed event for campaigns that budget per ad group. Null when the goal isn't a Whop-attributed event.

result_event_namestring nullable required

The merchant-defined event name when result_event is custom; null for the standard events.

resultsnumber nullable required

The Whop pixel-attributed count behind result_event. When a campaign's ad groups optimize different goals there is no single result_event (it is null), and this is instead the sum of each ad group's own attributed results. Null when nothing Whop-attributable is being optimized for.

return_on_ad_spendnumber required

Purchase value divided by spend, both in USD (a currency-neutral ratio); 0 when there is no spend.

schedulesnumber required

Whop pixel-attributed schedule events, last-click.

special_ad_categoriesstring[] required
spendnumber required

The amount charged, in spend_currency.

spend_currencystring nullable required

The ISO 4217 currency code of all monetary metrics.

status'active' | 'paused' | 'inactive' | 'stale' | 'pending_refund' | 'payment_failed' | 'draft' | 'in_review' | 'flagged' | 'importing' | 'imported' required

The lifecycle status of the ad campaign.

submitted_applicationsnumber required

Whop pixel-attributed submit-application events, last-click.

titlestring required

The title of the ad campaign.

unique_click_through_ratenumber nullable required

Unique clicks divided by impressions, between 0 and 1.

unique_clicksnumber required

The number of unique clicks.

updated_atstring required

When the campaign was last updated, as an ISO 8601 timestamp.

viewed_contentsnumber required

Whop pixel-attributed view-content events, last-click.

Example response

{
  "bid_type": "minimum_cost",
  "budget_optimization": "ad_campaign",
  "budget_type": "daily",
  "delivery_status": "payment_failed",
  "issues": [
    {
      "resource_type": "ad_campaign"
    }
  ],
  "objective": "awareness",
  "platform": "meta",
  "result_event": "purchase",
  "special_ad_categories": [
    "housing"
  ],
  "status": "active"
}

Changes