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 external account.
  • Read attributed performance: spend, results, cost per result, and return on ad spend, all on the campaign object itself.

Countries you cannot target

Whop doesn’t allow campaigns to target these countries: Requests to create an ad group or update its targeted countries are rejected if they include any of these codes. Remove them from your targeted locations before submitting the request.

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 /external_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. Billing belongs to the account, across its campaigns. Each collection combines eligible unpaid campaign spend into one payment using the account’s configured ads payment methods. You don’t configure a separate payment method or request a separate retry for each campaign. The spend field on a campaign is the amount charged to you, in spend_currency. Collection timing depends on accrued spend and billing thresholds. Consolidation doesn’t mean one payment per day. AI creative generation uses its own balance payment. Too little balance returns a 402 carrying a deposit_url.

When a payment fails

An account payment failure blocks delivery across its billable campaigns. Each affected campaign reports delivery_status: "payment_failed", while its configured status stays active or paused. Read delivery_status to determine whether a campaign can deliver, and issues for the failure reason. The account can’t activate campaigns while it has unresolved payment failures. You can still pause a campaign to keep it off after payment recovery. Whop also schedules automatic retries. You can request a retry after fixing the payment method.

Retry a payment

  1. In your account’s Ads dashboard, select Update payment method in the failed-payment banner, or open Ads settings and select Billing. Update the account’s card or fund the balance it uses.
  2. Select Retry payment once for the account. API integrations should call Retry Failed Ads Payments with the account’s biz_ ID and ad_campaign:update permission.
  3. Wait for the background attempt. A 202 response with queued: true confirms the job was accepted, not that the payment succeeded. Read the account’s ad campaigns for the outcome.
  4. After successful settlement, the payment block clears. Delivery can show processing while it’s recalculated and synchronized. Campaigns configured as active can resume if their other delivery requirements are met. Campaigns configured as paused stay paused.
Repeated requests while an account retry is queued or running return an error asking you to wait. If the payment fails again, delivery remains blocked: check the failure reason and fix the payment method before trying again. Don’t loop over campaigns to retry each one. The older campaign retry endpoint still queues an account retry on API versions before 2026-09-22. Starting with 2026-09-22, it returns 410 Gone. Use the account endpoint above. Older campaigns whose configured status was already payment_failed return to paused after successful retry, because their previous active/paused setting wasn’t retained.

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.