Skip to main content
POST
JavaScript

Authorizations

Authorization
string
header
required

An Account API key, account-scoped JWT, App API key, or user OAuth token. Prepend the key or token with Bearer, for example Bearer ***************************.

Headers

Idempotency-Key
string

A unique key that makes this request safe to retry. See Idempotent requests.

Maximum string length: 255
Example:

"d9105228-4a08-46b1-8b91-42fed586d383"

Api-Version-Date
string

Pins the request to a dated API version.

Example:

"2026-08-03"

Body

application/json
description
string
required

Full task instructions shown to workers.

gross_reward_amount
number
required

Gross bounty-pool amount (USD) escrowed per accepted submission, in whole dollars. Platform fees and affiliate shares are paid from this amount.

title
string
required

Short name of the task shown to workers.

accepted_submissions_limit
integer | null

Number of submissions that can be accepted (winner slots). Defaults to 1. The escrowed total is gross_reward_amount times this limit and must be at least $5.

account_id
string | null

Account whose balance funds the bounty pool (biz_ tag). Defaults to the caller's personal balance. Requires permission to move the account's funds.

allowed_country_codes
string[] | null

Countries whose residents can work the bounty, as ISO 3166 alpha-2 codes. Empty means worldwide.

business_goal_type
enum<string>

What the poster wants the work to achieve, declared once here.

Available options:
clipping,
post_engagement,
owned_account_growth,
ugc_content,
local_activation,
data_capture,
other
Example:

"clipping"

capture_spec
object

Per-bounty overrides of the served capture contract. Only accepted when business_goal_type is data_capture; omitted fields keep the platform defaults, and the resulting contract is echoed back as capture_spec on the bounty.

experience_id
string | null

Experience to host the bounty in (exp_ tag). Any visibility — public for an open bounty, private for an invited one. Required unless account_id is set, in which case the bounty anchors in that account's public forum.

frequency
enum<string>

How often the schedule creates a new bounty. Each occurrence is a separate bounty. Defaults to once; only applies with publish_at.

Available options:
once,
hourly,
daily,
weekly,
monthly
Example:

"weekly"

publish_at
string | null

ISO 8601 time to publish the bounty. When set, the bounty is created as a hidden draft and funded + published at this time instead of immediately.

publish_at_timezone
string | null

IANA timezone for recurring occurrences. Required when publish_at is set.

Response

bounty created

accepted_deliverable_types
enum<string>[]
required

The deliverable shapes this bounty accepts. Every bounty accepts any combination of content_url (posted links) and media (uploaded files), except data_capture bounties, whose proof is clips recorded in the Whop app that accumulate on the attempt.

Available options:
content_url,
media,
data_capture
accepted_submissions_count
integer
required

Submissions accepted so far.

accepted_submissions_limit
integer
required

Number of submissions that can be accepted (winner slots).

allowed_country_codes
string[]
required

Countries whose residents can work the bounty, as ISO 3166 alpha-2 codes. Empty means worldwide.

budget_amount
number
required

Total gross budget committed to the bounty: gross_reward_amount times accepted_submissions_limit.

business_goal_type
enum<string> | null
required

What the poster wants the work to achieve, declared once at create. null for bounties created before the taxonomy rolled out.

Available options:
clipping,
post_engagement,
owned_account_growth,
ugc_content,
local_activation,
data_capture,
other,
null
Example:

"clipping"

cancel_requested_at
string | null
required

When cancellation was requested, as an ISO 8601 timestamp. On a closed bounty this means the cancel is pending: submissions are stopped and the bounty cancels once in-flight submissions resolve. On a canceled bounty it records when the cancellation was requested. null when no cancellation was ever requested.

capture_spec
object | null
required

The technical contract footage must be recorded against. Present only on data_capture bounties; null for every other goal type.

created_at
string
required

When the bounty was created, as an ISO 8601 timestamp.

currency
enum<string>
required

Currency for all amounts on the bounty, as a lowercase ISO 4217 code.

Available options:
usd,
sgd,
inr,
aud,
brl,
cad,
dkk,
eur,
nok,
gbp,
sek,
chf,
hkd,
huf,
jpy,
mxn,
myr,
pln,
czk,
nzd,
aed,
cop,
ron,
thb,
bgn,
idr,
dop,
php,
try,
krw,
twd,
vnd,
pkr,
clp,
uyu,
ars,
zar,
dzd,
tnd,
mad,
kes,
kwd,
jod,
all,
xcd,
amd,
bsd,
bhd,
bob,
bam,
khr,
crc,
xof,
egp,
etb,
gmd,
ghs,
gtq,
gyd,
ils,
jmd,
mop,
mga,
mur,
mdl,
mnt,
nad,
ngn,
mkd,
omr,
pyg,
pen,
qar,
rwf,
sar,
rsd,
lkr,
tzs,
ttd,
uzs,
rub,
cny,
kzt,
awg
Example:

"usd"

description
string
required

Full task instructions shown to workers.

experience_id
string | null
required

Experience the bounty is hosted in, prefixed exp_. null for platform-wide bounties; may belong to a different account than the funder.

funding_account
object | null
required

Account whose balance funds the bounty pool, or null when a user funds it personally. May differ from the account hosting experience_id.

gross_paid_out_amount
number
required

Gross amount paid out from the bounty pool across accepted submissions — worker payouts, platform fees, and affiliate shares together. Tips and reviewer rewards are excluded.

gross_reward_amount
number
required

Gross bounty-pool amount allocated per accepted submission, in whole currency units.

id
string
required

Bounty ID, prefixed bnty_.

poster
object
required

User who posted the bounty — the account owner when created with an account API key.

scheduled_frequency
enum<string> | null
required

How often the schedule creates a new bounty. Each occurrence is a separate bounty; the original is not republished.

Available options:
once,
hourly,
daily,
weekly,
monthly,
null
Example:

"once"

scheduled_publish_at
string | null
required

When a scheduled bounty will publish, as an ISO 8601 timestamp. null once published, for bounties that were never scheduled, and for terminally failed drafts parked for manual rescheduling.

spots_remaining
integer
required

Unfilled winner capacity: accepted_submissions_limit minus accepted_submissions_count, clamped to zero. Not a signal that the bounty currently accepts new claims.

status
enum<string>
required

Lifecycle state. scheduled bounties are unpublished drafts, visible to their poster and the account's authorized managers; open bounties accept new submissions; closed bounties are live but no longer accept new submissions; completed bounties paid out every winner slot; canceled bounties ended before filling their slots.

Available options:
scheduled,
open,
closed,
completed,
canceled
Example:

"scheduled"

submissions_closed_at
string | null
required

When new submissions stopped being accepted, as an ISO 8601 timestamp. Set when a cancellation is requested on a bounty with work in flight, so in-flight submissions can resolve before the bounty cancels. null when submissions were never stopped — including completed bounties that simply filled every winner slot.

title
string
required

Short name of the task shown to workers.

unresolved_submissions_count
integer
required

Submissions still awaiting an outcome: in progress or pending review.

updated_at
string
required

When the bounty was last updated, as an ISO 8601 timestamp.