Skip to main content
An Ad Group sits inside an ad campaign and controls delivery for ads. It sets the audience, placements, schedule, budget, and optimization goal for its ads. Use the Ad Groups API to create ad groups in campaigns, list or retrieve targeting and delivery settings, update budgets or targeting, delete groups that should stop running, and pause or resume delivery.

Endpoints

EndpointRequest
List Ad GroupsGET /ad_groups
Create Ad GroupPOST /ad_groups
Retrieve Ad GroupGET /ad_groups/{id}
Update Ad GroupPATCH /ad_groups/{id}
Delete Ad GroupDELETE /ad_groups/{id}
Pause Ad GroupPOST /ad_groups/{id}/pause
Unpause Ad GroupPOST /ad_groups/{id}/unpause

Attributes

ad_campaign
object
required
The ad campaign this ad group belongs to, an object with an id.

Properties

id
string
required
The referenced entity’s id.
added_to_carts
number
required
Whop pixel-attributed add-to-cart events, last-click.
audiences
object
required
Saved-audience targeting: { include, exclude } arrays of audience IDs.
bid_type
string,null | null
required
Bid strategy.Available options: minimum_cost, average_target, maximum_target
budget_amount
number | null
required
Ad-set budget; null when the campaign owns budget (CBO).
budget_type
string,null | null
required
Whether the budget is daily or lifetime.Available options: daily, lifetime
click_through_rate
number
required
Clicks divided by impressions, between 0 and 1.
clicks
number
required
The number of clicks.
completed_registrations
number
required
Whop pixel-attributed complete-registration events, last-click.
contacts
number
required
Whop pixel-attributed contact events, last-click.
conversion_event
string | null
required
The pixel event optimized for. A standard event, or any custom pixel event name.
conversion_location
string,null | null
required
Where results happen: website, profile (IG/FB), messaging (DM), on_ad (engagement), or the lead destinations (instant_forms, instant_forms_and_messenger, website_and_instant_forms).Available options: website, profile, messaging, on_ad, instant_forms, instant_forms_and_messenger, website_and_instant_forms
cost_per_added_to_cart
number | null
required
Spend divided by attributed add-to-cart events; null when they are not the goal and none are attributed.
cost_per_click
number
required
Spend divided by clicks; 0 when there are no clicks.
cost_per_completed_registration
number | null
required
Spend divided by attributed complete-registration events; null when they are not the goal and none are attributed.
cost_per_contact
number | null
required
Spend divided by attributed contact events; null when contacts are not the goal and none are attributed.
cost_per_lead
number | null
required
Spend divided by attributed leads; null when leads are not a goal and none are attributed.
cost_per_mille
number
required
Spend per 1,000 impressions; 0 when there are no impressions.
cost_per_purchase
number | null
required
Spend divided by attributed purchases; null when purchases are not a goal and none are attributed.
cost_per_result
number | null
required
Spend divided by Whop pixel-attributed results; null when nothing Whop-attributable is being optimized for.
cost_per_schedule
number | null
required
Spend divided by attributed schedule events; null when schedules are not the goal and none are attributed.
cost_per_submitted_application
number | null
required
Spend divided by attributed submit-application events; null when they are not the goal and none are attributed.
cost_per_viewed_content
number | null
required
Spend divided by attributed view-content events; null when they are not the goal and none are attributed.
created_at
string
required
When the ad group was created, ISO 8601.
custom_conversions
number
required
Whop pixel-attributed custom (merchant-defined) conversion events, last-click, across all custom event names.
demographics
object
required
Demographic targeting: automatic (Advantage+), age range, gender.
desired_cost_per_result
number | null
required
Target/cap cost for average_target / maximum_target.
devices
object
required
Device targeting: platforms and operating systems.
dynamic_creative
boolean
required
Whether ads within this ad group have their creatives and copy dynamically AB tested.
ends_at
string | null
required
Schedule end, ISO 8601.
frequency
number | null
required
Platform-reported impressions divided by reach.
frequency_cap
object | null
required
Impression cap; only valid for reach optimization.
id
string
required
Unique identifier for the ad group.
impressions
number
required
The number of impressions.
issues
object[]
required
Open issues affecting this ad group. Empty when there are none.

Properties

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 | null
required
The ID of the campaign, ad group, or ad the issue is attached to.
resource_type
string
required
The type of resource the issue is attached to.Available options: ad_campaign, ad_group, ad
languages
string[]
required
Targeted languages as ISO 639 codes (e.g. en, es). Region-specific Meta locales without an ISO mapping appear as their numeric Meta locale key. Empty = all languages.
leads
number
required
Whop pixel-attributed leads, last-click.
message_apps
string[]
required
For messaging destinations: the apps to message on (messenger, instagram, whatsapp). Empty otherwise.
minimum_daily_spend
number | null
required
Daily spend floor within the budget.
optimization_goal
string | null
required
What the ad group optimizes for.
placements
object[]
required
Targeted placements as { platform, positions }. Empty = automatic (Advantage+) placements.
purchase_value
number
required
USD value of pixel-attributed purchases.
purchases
number
required
Whop pixel-attributed purchases, last-click.
reach
number
required
The number of unique people who saw this.
regions
object
required
Geo targeting: include/exclude countries, regions (ISO 3166-2 states, e.g. US-CA), cities, zips.
result_event
string,null | null
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.Available options: purchase, lead, schedule, submit_application, contact, complete_registration, view_content, add_to_cart, custom
result_event_name
string | null
required
The merchant-defined event name when result_event is custom; null for the standard events.
return_on_ad_spend
number
required
Purchase value divided by spend; 0 when there is no spend.
schedules
number
required
Whop pixel-attributed schedule events, last-click.
spend
number
required
The amount charged, in spend_currency.
spend_currency
string | null
required
The ISO 4217 currency code of all monetary metrics.
starts_at
string | null
required
Schedule start, ISO 8601.
status
string
required
Delivery status of the ad group.Available options: active, paused, rejected
submitted_applications
number
required
Whop pixel-attributed submit-application events, last-click.
title
string | null
required
The display title of the ad group.
unique_click_through_rate
number | null
required
Unique clicks divided by impressions, between 0 and 1.
unique_clicks
number
required
The number of unique clicks.
updated_at
string
required
When the ad group was last updated, ISO 8601.
viewed_contents
number
required
Whop pixel-attributed view-content events, last-click.
AdGroup
{
	"ad_campaign": {
		"id": "adcamp_xxxxxxxxxx"
	},
	"added_to_carts": 24,
	"audiences": {
		"exclude": [],
		"include": ["aud_xxxxxxxxxxx"]
	},
	"bid_type": "minimum_cost",
	"budget_amount": 100,
	"budget_type": "daily",
	"click_through_rate": 0.036,
	"clicks": 720,
	"completed_registrations": 16,
	"contacts": 10,
	"conversion_event": "purchase",
	"conversion_location": "website",
	"cost_per_added_to_cart": 8.33,
	"cost_per_click": 0.28,
	"cost_per_completed_registration": 12.5,
	"cost_per_contact": 20,
	"cost_per_lead": 13.33,
	"cost_per_mille": 10,
	"cost_per_purchase": 25,
	"cost_per_result": 25,
	"cost_per_schedule": null,
	"cost_per_submitted_application": null,
	"cost_per_viewed_content": 0.67,
	"created_at": "2026-06-01T12:00:00Z",
	"custom_conversions": 5,
	"demographics": {
		"age_max": 45,
		"age_min": 21,
		"gender": "all"
	},
	"desired_cost_per_result": 30,
	"devices": {
		"platforms": ["mobile", "desktop"]
	},
	"dynamic_creative": false,
	"ends_at": "2026-07-01T12:00:00Z",
	"frequency": 1.6,
	"frequency_cap": null,
	"id": "adgrp_xxxxxxxxxxx",
	"impressions": 20000,
	"issues": [
		{
			"id": "adiss_xxxxxxxxxxx",
			"message": "The audience is too narrow to deliver. Broaden the targeting to reach more people.",
			"resource_id": "adgrp_xxxxxxxxxxx",
			"resource_type": "ad_group"
		}
	],
	"languages": ["en"],
	"leads": 15,
	"message_apps": [],
	"minimum_daily_spend": 25,
	"optimization_goal": "purchase",
	"placements": [
		{
			"platform": "instagram",
			"positions": ["feed", "stories"]
		}
	],
	"purchase_value": 5200,
	"purchases": 8,
	"reach": 12500,
	"regions": {
		"countries": ["US"]
	},
	"result_event": "purchase",
	"result_event_name": null,
	"return_on_ad_spend": 26,
	"schedules": 0,
	"spend": 200,
	"spend_currency": "usd",
	"starts_at": "2026-06-01T12:00:00Z",
	"status": "active",
	"submitted_applications": 0,
	"title": "US founders",
	"unique_click_through_rate": 0.03,
	"unique_clicks": 600,
	"updated_at": "2026-06-02T12:00:00Z",
	"viewed_contents": 300
}