Skip to main content
An Ad is the individual creative unit delivered by an ad group. It holds the copy, creative assets, and destination URL for one ad. Use the Ads API to list ads for an account, create ads inside ad groups, retrieve or update creative details, delete ads that should stop running, and pause or resume delivery.

Endpoints

EndpointRequest
List AdsGET /ads
Create AdPOST /ads
Retrieve AdGET /ads/{id}
Update AdPATCH /ads/{id}
Delete AdDELETE /ads/{id}
Pause AdPOST /ads/{id}/pause
Unpause AdPOST /ads/{id}/unpause

Attributes

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

Properties

id
string
required
The referenced entity’s id.
ad_group
object
required
The ad group this ad 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.
call_to_action
string,null | null
required
The call-to-action button shown on the ad.Available options: 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
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 ad was created, as an ISO 8601 timestamp.
creatives
object[]
required
The creatives used by this ad. The original/uncropped asset has a null format; square, vertical, and horizontal entries are its per-placement crops.

Properties

format
string,null | null
required
The placement crop this asset covers, or null for the original/uncropped asset.Available options: square, vertical, horizontal
id
string
required
The creative attachment’s file id.
media_type
string | null
required
The kind of asset, image or video.
url
string | null
required
CDN url of the asset.
custom_conversions
number
required
Whop pixel-attributed custom (merchant-defined) conversion events, last-click, across all custom event names.
descriptions
string[]
required
The description variants shown on the ad.
frequency
number | null
required
Platform-reported impressions divided by reach.
headlines
string[]
required
The headline variants shown on the ad.
id
string
required
Unique identifier for the ad.
impressions
number
required
The number of impressions.
issues
object[]
required
Open issues affecting this ad. 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
lead_form
object | null
required
The instant lead form on the ad (Meta lead ads), or null when the ad group’s conversion_location is not an instant-form destination. An object with name, form_type (more_volume or higher_intent), an optional intro, questions, a privacy_policy, an optional completion screen, and phone_verification.
leads
number
required
Whop pixel-attributed leads, last-click.
messaging_config
object | null
required
The click-to-message welcome copy, an object with message and keyword, or null when the ad has none.
multi_advertiser_ads
boolean
required
Whether the ad can appear alongside other advertisers’ ads in the same unit. Defaults to true.
post_id
string | null
required
The existing post this ad promotes (a Facebook post or Instagram media), or null when it uses uploaded creatives.
primary_texts
string[]
required
The primary text variants shown in the ad body.
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.
social_accounts
object[]
required
The social accounts (Facebook page, Instagram profile) the ad runs under, each an object with an id.
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 delivery status of the ad.Available options: active, paused, in_review, rejected
submitted_applications
number
required
Whop pixel-attributed submit-application events, last-click.
title
string | null
required
The display title of the ad. Falls back to the creative set caption when unset.
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 was last updated, as an ISO 8601 timestamp.
url
string | null
required
The URL the ad links to.
url_parameters
object
required
Query parameters appended to the URL, as a string-to-string map.
viewed_contents
number
required
Whop pixel-attributed view-content events, last-click.
Ad
{
	"ad_campaign": {
		"id": "adcamp_xxxxxxxxxx"
	},
	"ad_group": {
		"id": "adgrp_xxxxxxxxxxx"
	},
	"added_to_carts": 18,
	"call_to_action": "shop_now",
	"click_through_rate": 0.034,
	"clicks": 420,
	"completed_registrations": 12,
	"contacts": 8,
	"cost_per_added_to_cart": 7.22,
	"cost_per_click": 0.31,
	"cost_per_completed_registration": 10.83,
	"cost_per_contact": 16.25,
	"cost_per_lead": 9.29,
	"cost_per_mille": 14.5,
	"cost_per_purchase": 21.67,
	"cost_per_result": 21.67,
	"cost_per_schedule": null,
	"cost_per_submitted_application": null,
	"cost_per_viewed_content": 0.54,
	"created_at": "2026-06-01T12:00:00Z",
	"creatives": [
		{
			"format": "square",
			"id": "file_xxxxxxxxxxxx",
			"media_type": "image",
			"url": "https://img.whop.com/file_xxxxxxxxxxxx.jpg"
		}
	],
	"custom_conversions": 4,
	"descriptions": ["Limited spots available this week."],
	"frequency": 1.8,
	"headlines": ["Join Pickaxe Pro"],
	"id": "ad_xxxxxxxxxxxxx",
	"impressions": 9000,
	"issues": [
		{
			"id": "adiss_xxxxxxxxxxx",
			"message": "The ad's creative violates the ad network's policies. Edit the creative and resubmit for review.",
			"resource_id": "ad_xxxxxxxxxxxxx",
			"resource_type": "ad"
		}
	],
	"lead_form": null,
	"leads": 14,
	"messaging_config": null,
	"multi_advertiser_ads": true,
	"post_id": null,
	"primary_texts": ["Build sharper trading habits with daily lessons."],
	"purchase_value": 1820,
	"purchases": 6,
	"reach": 5000,
	"result_event": "purchase",
	"result_event_name": null,
	"return_on_ad_spend": 14,
	"schedules": 0,
	"social_accounts": [
		{
			"id": "sacc_xxxxxxxxxxxx"
		}
	],
	"spend": 130,
	"spend_currency": "usd",
	"status": "active",
	"submitted_applications": 0,
	"title": "Pickaxe Pro launch ad",
	"unique_click_through_rate": 0.028,
	"unique_clicks": 350,
	"updated_at": "2026-06-02T12:00:00Z",
	"url": "https://whop.com/pickaxe",
	"url_parameters": {
		"utm_campaign": "pickaxe-launch"
	},
	"viewed_contents": 240
}