Skip to main content
An Ad Campaign is the top-level container for paid ads on an ad network. It sets the platform, objective, and budget strategy shared by its ad groups and ads. Use the Ad Campaigns API to create campaigns, list campaigns for an account, retrieve or update campaign settings, and pause or resume campaign delivery.

Endpoints

EndpointRequest
List Ad CampaignsGET /ad_campaigns
Create Ad CampaignPOST /ad_campaigns
Retrieve Ad CampaignGET /ad_campaigns/{id}
Update Ad CampaignPATCH /ad_campaigns/{id}
Delete Ad CampaignDELETE /ad_campaigns/{id}
Pause Ad CampaignPOST /ad_campaigns/{id}/pause
Unpause Ad CampaignPOST /ad_campaigns/{id}/unpause

Attributes

added_to_carts
number
required
Whop pixel-attributed add-to-cart events, last-click.
bid_type
string,null | null
required
The bidding strategy the campaign uses.Available options: minimum_cost, average_target, maximum_target
budget_amount
number | null
required
The campaign budget in USD. Null when budget is set at the ad group level (ABO).
budget_optimization
string,null | null
required
Which level owns the budget — the campaign (CBO) or each ad group (ABO).Available options: ad_campaign, ad_group
budget_type
string,null | null
required
Whether the budget is spent per day or over the campaign’s 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.
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 campaign was created, as an ISO 8601 timestamp.
custom_conversions
number
required
Whop pixel-attributed custom (merchant-defined) conversion events, last-click, across all custom event names.
frequency
number | null
required
Platform-reported impressions divided by reach.
id
string
required
Unique identifier for the ad campaign.
impressions
number
required
The number of impressions.
issues
object[]
required
Open issues affecting the campaign and its descendant ad groups and ads.

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
leads
number
required
Whop pixel-attributed leads, last-click.
objective
string,null | null
required
The goal the campaign optimizes toward.Available options: awareness, traffic, engagement, leads, sales
optimization_goal
string | null
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
string
required
The ad network the campaign runs on.Available options: meta
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.
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.
special_ad_categories
string[]
required
Regulated categories the campaign is declared under. Ads in these categories are subject to extra targeting restrictions. Empty when none apply.
spend
number
required
The amount charged, in spend_currency.
spend_currency
string | null
required
The ISO 4217 currency code of all monetary metrics.
status
string
required
The lifecycle status of the ad campaign.Available options: active, paused, inactive, stale, pending_refund, payment_failed, draft, in_review, flagged, importing, imported
submitted_applications
number
required
Whop pixel-attributed submit-application events, last-click.
title
string
required
The title of the ad campaign.
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 campaign was last updated, as an ISO 8601 timestamp.
viewed_contents
number
required
Whop pixel-attributed view-content events, last-click.
AdCampaign
{
	"added_to_carts": 42,
	"bid_type": "minimum_cost",
	"budget_amount": 250,
	"budget_optimization": "ad_campaign",
	"budget_type": "daily",
	"click_through_rate": 0.032,
	"clicks": 1200,
	"completed_registrations": 28,
	"contacts": 18,
	"cost_per_added_to_cart": 17.86,
	"cost_per_click": 0.63,
	"cost_per_completed_registration": 26.79,
	"cost_per_contact": 41.67,
	"cost_per_lead": 30,
	"cost_per_mille": 20,
	"cost_per_purchase": 50,
	"cost_per_result": 50,
	"cost_per_schedule": null,
	"cost_per_submitted_application": null,
	"cost_per_viewed_content": 1.25,
	"created_at": "2026-06-01T12:00:00Z",
	"custom_conversions": 10,
	"frequency": 2.1,
	"id": "adcamp_xxxxxxxxxx",
	"impressions": 37500,
	"issues": [
		{
			"id": "adiss_xxxxxxxxxxx",
			"message": "The ad's creative violates the ad network's policies. Edit the creative and resubmit for review.",
			"resource_id": "adcamp_xxxxxxxxxx",
			"resource_type": "ad_campaign"
		}
	],
	"leads": 25,
	"objective": "sales",
	"optimization_goal": "purchase",
	"platform": "meta",
	"purchase_value": 12600,
	"purchases": 15,
	"reach": 17800,
	"result_event": "purchase",
	"result_event_name": null,
	"return_on_ad_spend": 16.8,
	"schedules": 0,
	"special_ad_categories": [],
	"spend": 750,
	"spend_currency": "usd",
	"status": "active",
	"submitted_applications": 0,
	"title": "Pickaxe Pro launch",
	"unique_click_through_rate": 0.027,
	"unique_clicks": 1010,
	"updated_at": "2026-06-02T12:00:00Z",
	"viewed_contents": 600
}