Skip to main content
POST
/
ad_campaigns
Create ad campaign
curl --request POST \
  --url https://api.whop.com/api/v1/ad_campaigns \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "company_id": "biz_xxxxxxxxxxxxxx",
  "config": {
    "conversion_goal": "purchase",
    "bid_strategy": "lowest_cost",
    "bid_amount": 42,
    "status": "active",
    "special_categories": [
      "<string>"
    ],
    "budget_optimization": true,
    "start_time": "<string>",
    "end_time": "<string>"
  },
  "daily_budget": 6.9,
  "platform": "meta",
  "title": "<string>",
  "ad_creative_set_ids": [
    "<string>"
  ],
  "product_id": "prod_xxxxxxxxxxxxx",
  "target_country_codes": [
    "<string>"
  ]
}
'
{
  "id": "adcamp_xxxxxxxxxxx",
  "title": "<string>",
  "status": "active",
  "target_country_codes": [
    "<string>"
  ],
  "daily_budget": 6.9,
  "platform": "meta",
  "available_budget": 6.9,
  "created_at": "2023-12-01T05:00:00.401Z",
  "updated_at": "2023-12-01T05:00:00.401Z",
  "paused_until": "2023-12-01T05:00:00.401Z",
  "clicks_count": 42,
  "impressions_count": 42,
  "purchases_count": 42,
  "remaining_balance": 6.9,
  "revenue": 6.9,
  "return_on_ad_spend": 6.9,
  "todays_spend": 6.9,
  "total_credits": 6.9,
  "total_spend": 6.9,
  "product": {
    "id": "prod_xxxxxxxxxxxxx",
    "title": "Pickaxe Analytics",
    "route": "pickaxe-analytics"
  },
  "created_by_user": {
    "id": "user_xxxxxxxxxxxxx",
    "name": "John Doe",
    "username": "johndoe42"
  },
  "payment_method": {
    "typename": "<string>",
    "id": "payt_xxxxxxxxxxxxx",
    "created_at": "2023-12-01T05:00:00.401Z",
    "payment_method_type": "acss_debit"
  },
  "billing_ledger_account": {
    "id": "ldgr_xxxxxxxxxxxxx"
  },
  "config": {
    "conversion_goal": "purchase",
    "bid_strategy": "lowest_cost",
    "bid_amount": 42,
    "status": "active",
    "special_categories": [
      "<string>"
    ],
    "budget_optimization": true,
    "start_time": "<string>",
    "end_time": "<string>"
  }
}

Authorizations

Authorization
string
header
required

A company API key, company scoped JWT, app API key, or user OAuth token. You must prepend your key/token with the word 'Bearer', which will look like Bearer ***************************

Body

application/json

Parameters for CreateAdCampaignV2

company_id
string
required

The company ID to create this ad campaign for.

Example:

"biz_xxxxxxxxxxxxxx"

config
object
required

Unified campaign configuration (conversion goal, budget, bidding, etc.).

daily_budget
number
required

Daily budget in dollars (minimum $5). Campaign starts inactive until funded via checkout.

Example:

6.9

platform
enum<string>
required

The ad platform to run on (e.g., meta, tiktok).

Available options:
meta,
tiktok
title
string
required

The title of the ad campaign. Must be max 100 characters.

ad_creative_set_ids
string[] | null

Array of creative set IDs to link to this campaign.

Represents a unique identifier that is Base64 obfuscated. It is often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "VXNlci0xMA==") or integer (such as 4) input value will be accepted as an ID.

product_id
string | null

The unique identifier of the product to promote.

Example:

"prod_xxxxxxxxxxxxx"

target_country_codes
string[] | null

Array of ISO3166 country codes for territory targeting.

Represents textual data as UTF-8 character sequences. This type is most often used by GraphQL to represent free-form human-readable text.

Response

A successful response

An advertising campaign running on an external platform or within Whop.

id
string
required

The unique identifier for the ad campaign.

Example:

"adcamp_xxxxxxxxxxx"

title
string
required

The title of the ad campaign

status
enum<string>
required

Current status of the campaign (active, paused, or inactive)

Available options:
active,
paused,
inactive,
stale
target_country_codes
string[]
required

Array of ISO3166 country codes for territory targeting

Represents textual data as UTF-8 character sequences. This type is most often used by GraphQL to represent free-form human-readable text.

daily_budget
number | null
required

Effective daily budget in dollars — sum of ad group budgets when set, otherwise campaign-level daily budget

Example:

6.9

platform
enum<string> | null
required

The external platform this campaign is running on (e.g., meta, tiktok).

Available options:
meta,
tiktok
available_budget
number
required

Available budget in dollars, capped at daily budget minus today's spend for daily campaigns

Example:

6.9

created_at
string<date-time>
required

The datetime the ad campaign was created.

Example:

"2023-12-01T05:00:00.401Z"

updated_at
string<date-time>
required

The datetime the ad campaign was last updated.

Example:

"2023-12-01T05:00:00.401Z"

paused_until
string<date-time> | null
required

If temporarily paused, the timestamp when the campaign will auto-resume

Example:

"2023-12-01T05:00:00.401Z"

clicks_count
integer
required

Number of clicks

Example:

42

impressions_count
integer
required

Number of impressions (views)

Example:

42

purchases_count
integer
required

Number of purchases

Example:

42

remaining_balance
number
required

Remaining balance in dollars

Example:

6.9

revenue
number
required

Total revenue generated from users who converted through this campaign

Example:

6.9

return_on_ad_spend
number
required

Return on Ad Spend (ROAS) percentage - revenue generated divided by ad spend

Example:

6.9

todays_spend
number
required

Amount spent today in dollars

Example:

6.9

total_credits
number
required

Total credits added to the campaign in dollars

Example:

6.9

total_spend
number
required

Total amount spent on conversions in dollars

Example:

6.9

product
object
required

The access pass being promoted. Null for campaigns that don't target a specific product.

created_by_user
object
required

The user who created the campaign

payment_method
BasePaymentMethod · object
required

A saved payment method with no type-specific details available.

billing_ledger_account
object
required

The ledger account being charged for platform balance billing (null if using card)

config
object
required

Unified campaign configuration (objective, budget, bidding, etc.).