Skip to main content
Advertising lets you buy ads on networks like Meta from your Whop account. Whop owns the ad account, the review and launch path, and the billing relationship. You create a campaign through the API instead of connecting an ad account you manage yourself.

What you can build

  • Run campaigns on Meta, with an objective, a budget, and a schedule.
  • Target an audience by location, demographics, interests, devices, and languages, or upload a customer list as an audience.
  • Generate creatives as AI images or video from a prompt, supply your own assets, or promote a post that already exists on a connected social account.
  • Read attributed performance: spend, results, cost per result, and return on ad spend, all on the campaign object itself.

Before you spend

Three things gate a live ad, and all three are one-time setup:
  • A Facebook page for ads to run under. GET /social_accounts must return a facebook entry.
  • A payment method connected in the dashboard, either your Whop balance or a card. Drafts work without one.
  • The Whop pixel on your destination, unless you send traffic to a whop.com store page. Any external landing page needs the pixel first.
The Ads API overview covers each of these with the exact calls, the required scopes, and the error strings you get when one is missing.

Core objects

Ad campaign, ad group, ad, audience. Each is defined in Core Concepts. Advertising has one hierarchy, and every object belongs to the level above it.
adcamp_
Holds the objective, the platform, and the budget strategy. See Ad Campaigns.
adgrp_
Holds targeting, the optimization goal, the schedule, and its own budget by default. See Ad Groups.
ad_
Holds the creatives, the copy variants, the call to action, and the destination URL. See Ads.
POST /ads accepts an inline ad_group, which accepts an inline ad_campaign, so one request creates the whole tree in a single transaction. Pass ad_group_id instead to attach the ad to an ad group that already exists. To launch later rather than now, set status to draft on the inline ad_campaign, then activate it with PATCH /ad_campaigns/{id}. Budget lives at exactly one level, never both: on the ad group by default, or on the campaign when you set budget_optimization to ad_campaign.

How results are counted

Every performance number Whop reports is attributed by the Whop pixel, not by the ad network. result_event names the conversion event a campaign is judged on, and results is the pixel-attributed count of it. cost_per_result divides spend by that count. When a campaign’s ad groups optimize toward different goals there’s no single result_event, so it’s null and results becomes the sum of each ad group’s own attributed results. When nothing Whop-attributable is being optimized for, both are null rather than zero.

Paying for ads

Spend accrues as ads deliver and is charged afterward. The spend field on a campaign is the amount charged to you, in spend_currency. A campaign whose payment fails stops delivering and reports payment_failed. Retry a Failed Ad Campaign Payment resumes it once the payment method works. AI creative generation bills from your balance rather than from ad spend. Too little balance returns a 402 carrying a deposit_url.

Why a campaign isn’t delivering

delivery_status answers this directly. It’s the first field to read when a campaign exists but nothing is happening. Several states can be true at once, so the value is the highest one on this ladder: Ads and ad groups carry their own delivery_status with different values. A new ad passes through in_review before it delivers.

Where to go next

Create and launch an ad

The full flow, from creative to live ad, in two calls.

Install the pixel

Required before results can be attributed.

Build an audience

Upload a customer list to target or exclude.

Ads reference

Every advertising endpoint, with a playground.