Skip to main content
POST
Create a CPC campaign.
A campaign serves one of your CPC creatives across partner placements at up to max_bid_cents per click, capped by the daily and total budgets. Pick the creative from GET /cpc/creatives; it has to be active and belong to an active OnlyFans account. Your wallet balance must cover budget_total_cents at creation. For tracking and trial creatives the OnlyFans link is minted first; if that fails, no campaign is created and the request answers 502 link_creation_failed, safe to retry. Money is integer cents everywhere on this resource: bids from 10 to 200 cents, daily budget from 20to20 to 50,000, total budget from 100to100 to 1,000,000. Dates without an offset are read in the Studio timezone.

Authorizations

X-API-Key
string
header
required

Your API key from the Studio Dashboard

Body

application/json
creative_public_id
string
required

Public id of one of your CPC creatives (GET /cpc/creatives). The creative must be active and sit on an active OnlyFans account.

Maximum string length: 32
Example:

"cpcr_p1bzku7u"

name
string
required

Campaign name shown in Studio.

Maximum string length: 100
Example:

"Reddit push September"

max_bid_cents
integer
required

Maximum bid per click, in cents (10 to 200).

Required range: 10 <= x <= 200
Example:

55

budget_daily_cents
integer
required

Daily budget cap, in cents: at least 2000, at most 5000000 ($50,000), and never above budget_total_cents.

Required range: 2000 <= x <= 5000000
Example:

5000

budget_total_cents
integer
required

Lifetime budget cap, in cents: at least 10000, at most 100000000 ($1,000,000). The campaign flips to completed when spend reaches it.

Required range: 10000 <= x <= 100000000
Example:

100000

date_start
string<date>

Scheduled start, YYYY-MM-DD or ISO 8601. Defaults to today in the Studio timezone when omitted; a value with an offset is converted.

Example:

"2026-09-15"

date_end
string<date> | null

Scheduled end, must be later than date_start. null runs the campaign until the total budget is spent.

Example:

null

status
enum<string>
default:active

Initial state. paused creates the campaign without serving it; switch to active later through the settings endpoint.

Available options:
active,
paused
Example:

"active"

freq_cap
integer
default:0

Maximum impressions shown to the same visitor within freq_cap_days. 0 means uncapped.

Required range: 0 <= x <= 100
Example:

3

freq_cap_days
enum<integer>
default:3

Window the frequency cap is measured over, in days.

Available options:
1,
3,
7
Example:

3

blocked_placements
string[]

Placement keys excluded from serving. Same site-xxxxxxxx keys the stats endpoint returns.

Maximum array length: 500
Pattern: ^site-[0-9a-f]{8}$

Prefix for the tracking-link names minted for this campaign. Defaults to CPC.

Required string length: 2 - 40
Pattern: ^[\w .\-]+$
Example:

"CPC"

Response

Created.

success
boolean
Example:

true

data
object