Skip to main content
POST
Create a campaign

Authorizations

Authorization
string
header
required

Bearer authentication header of the form Bearer <token>, where <token> is your auth token.

Body

application/json

The campaign to create.

brand_id
string
required

The brand that owns the campaign. A brand ID that your API key cannot read returns 404.

Example:

"brd_3f9c0a1b2c3d4e5f60718293a4b5c6d7"

name
string
required

The campaign name. It must be different from the names of the brand's other campaigns.

Required string length: 1 - 256
Example:

"Autumn Roast Launch"

instructions
string
required

What creators must do in their clips. Creators see this text.

Minimum string length: 1
Example:

"Post a 15 to 45 second clip that shows the new autumn roast. Tag @northwind."

content_type
enum<string>
required

The kind of clip: clipping, logo, music, ugc or reposting.

Available options:
logo,
clipping,
music,
ugc,
reposting
Example:

"clipping"

budget_cents
integer
required

The budget for clips, in cents. It does not include the ClipStake fee, which you pay when you fund the campaign.

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

500000

platforms
object[]
required

The platforms the campaign accepts clips from, each with its rate.

Required array length: 1 - 2 elements
max_payout_per_clip_cents
integer
required

The most that one clip can earn from the campaign, in cents.

Required range: x <= 9007199254740991
Example:

50000

min_views
integer
required

The views a clip must get before it can earn.

Required range: x <= 9007199254740991
Example:

1000

max_clips_per_creator
integer

The most clips one creator can submit to the campaign. Leave it out for no limit.

Required range: x <= 9007199254740991
Example:

10

eligibility
enum<string>
default:open

open: every creator can find the campaign and submit. private: only creators that you invite in the dashboard can submit. The default is open.

Available options:
open,
private
Example:

"open"

end_date
string<date-time>

When the campaign ends. Omit it for a campaign with no end date.

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Example:

"2026-12-31T00:00:00.000Z"

thumbnail_url
string<uri>

The campaign image that creators see. Use an https link to a JPEG, PNG or WebP image.

Example:

"https://cdn.northwind.example/campaigns/autumn-roast.jpg"

geo_targeting
object[]

Pay by the country of the viewers. Send include rules or one exclude rule, never both. Needs instagram in platforms, and cannot be used with x. Leave it out or send an empty list to pay the platform rates for every view.

Example:
agency_cpm_cents
integer

Your agency's share of each 1,000 views, in cents. Creators earn every rate less this amount, and the difference goes to your wallet when payouts are released. It must be less than every rate in the campaign. Leave it out to keep no share.

Required range: x <= 9007199254740991
Example:

20

resources
object[]

Files and folders for creators.

Maximum array length: 20

Response

Successful response

A campaign that your agency can read.

id
string
required

Campaign ID.

Pattern: ^cmp_[0-9a-f]{32}$
Example:

"cmp_8a1d4e2f6b7c4d9e8f0a1b2c3d4e5f60"

brand_id
string
required

Brand ID.

Pattern: ^brd_[0-9a-f]{32}$
Example:

"brd_3f9c0a1b2c3d4e5f60718293a4b5c6d7"

name
string
required

The campaign name.

Example:

"Autumn Roast Launch"

slug
string
required

The short name of the campaign in ClipStake web addresses.

Example:

"autumn-roast-launch"

status
enum<string>
required

pending_payment: the budget is not paid yet. ready_to_launch: the budget is paid and the campaign is not live yet. active: the campaign is live and clips earn. paused: the campaign stopped paying for new views. ended: the campaign is over.

Available options:
pending_payment,
ready_to_launch,
active,
paused,
ended
Example:

"active"

budget_cents
integer
required

The campaign budget for clips, in cents. It does not include the ClipStake fee.

Required range: -9007199254740991 <= x <= 9007199254740991
Example:

500000

platforms
object[]
required

The platforms that the campaign accepts clips from, each with its rate.

geo_enabled
boolean
required

True when the campaign pays by the country of the viewers.

Example:

false

geo_targeting
object[]
required

The country rules of the campaign, include rules first, in the order the campaign shows them. A campaign has include rules or one exclude rule, never both. With include rules, views from other countries earn nothing. Empty when geo targeting is off.

Example:
max_payout_per_clip_cents
integer
required

The most that one clip can earn from the campaign, in cents.

Required range: -9007199254740991 <= x <= 9007199254740991
Example:

50000

pause_threshold_percent
integer
required

The campaign pauses when its clips have earned this percentage of the budget.

Required range: -9007199254740991 <= x <= 9007199254740991
Example:

90

start_date
string<date-time>
required

When the campaign starts.

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Example:

"2026-09-15T00:00:00.000Z"

end_date
string<date-time> | null
required

When the campaign ends. Null if the campaign has no end date.

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Example:

"2026-10-15T00:00:00.000Z"

launched_at
string<date-time> | null
required

When the campaign went live. Null if it never went live.

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Example:

"2026-09-15T09:00:00.000Z"

created_at
string<date-time>
required

When the campaign was created.

Pattern: ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z))$
Example:

"2026-09-10T14:20:00.000Z"

balance
object
required

The money in the campaign.