Skip to main content
POST
Upload the customer CSV with POST /files, then pass the returned file_... ID as file_id. column_mapping tells Whop which CSV header contains each identity field. Headers can be custom, but rows missing both email and phone are skipped. After creating the audience, poll List Audiences until status is ready, partial, or failed. Map ltv to a column of per-customer lifetime values to build a value-based audience. Lookalikes created from it favor people similar to your highest-value customers.

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"

Body

application/json
account_id
string
required

Account ID, prefixed biz_.

audience_type
enum<string>

What to create. Defaults to custom (CSV upload).

Available options:
custom,
lookalike
auto_refresh
boolean

Filter audiences only, and set only at creation. true (the default) rebuilds membership from the filters twice a day. false keeps whoever matched at creation and never rebuilds.

column_mapping
object

Custom audiences only. Maps supported identity fields to CSV column headers. Map at least one of email or phone.

count
integer

Lookalikes only. Number of lookalike audiences to create (1–6).

file_id
string

Custom audiences only. The uploaded customer CSV — a file id (file_...) returned by POST /files.

filters
object

Filter audiences only. The People filters that define membership, keyed exactly as GET /people accepts them — for example {"os": "iOS", "country": "US"}. Date filters must be rolling windows — first_seen_within_days or last_seen_within_days — so the audience re-anchors on every refresh; fixed dates such as first_seen_after are rejected. Source values are canonical source paths (whop:<campaign>:<group>:<ad>, ext:<platform>:..., referrer:<domain>, direct), exact or with a trailing :* wildcard.

name
string

Audience display name. Required for custom audiences; lookalike names are generated from the source audience.

percentage
integer

Lookalikes only. Total similarity reach as a whole percent (1–20), sliced evenly across count — must be divisible by count.

source_audience_id
string

Lookalikes only. The ready custom audience (adaud_) to build from; it needs at least 100 matched people.

Response

Audience created — the audience object for custom audiences, or { data: [...] } for lookalike ladders.

audience_type
enum<string>
required

custom = a customer list (uploaded, or built from saved People filters); lookalike = Meta lookalike built from a custom audience.

Available options:
custom,
lookalike
Example:

"custom"

auto_refresh
boolean
required

Whether membership keeps updating. true rebuilds it from the saved filters twice a day, so people join and leave as they start and stop matching. false keeps whoever matched when it was built and never rebuilds. Always false for uploaded lists and lookalikes.

created_at
string
required

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

error_message
string | null
required

Processing error message. null unless processing is partial or failed.

filters
object | null
required

For audiences built from People filters: the filters that define membership, keyed exactly as GET /people accepts them — for example {"os": "iOS", "country": "US"}. null for uploaded lists and lookalikes.

id
string
required

Audience ID, prefixed adaud_.

last_refreshed_at
string | null
required

When the audience membership was last rebuilt, as an ISO 8601 timestamp. null until the first build completes.

lookalike_ratio
number | null
required

For lookalikes: the upper bound of the similarity band as a fraction (0.02 = top 2%). null for custom audiences.

lookalike_starting_ratio
number | null
required

For lookalikes: the lower bound of the similarity band as a fraction. null for custom audiences and first-tier lookalikes.

match_rates
object[]
required
matched_rows
number
required

Members successfully uploaded to connected ad accounts. Always 0 for lookalikes.

name
string
required

Audience display name.

platform_audience_ids
string[]
required

External audience IDs created on connected ad platforms, such as Meta.

processed_rows
number
required

Members processed from the source so far. Always 0 for lookalikes.

progress_percent
number
required

Processing progress from 0 to 100.

source_audience_id
string | null
required

For lookalikes: the audience this lookalike was built from. null for custom audiences.

source_type
enum<string>
required

Where members come from. csv_upload = an uploaded customer list; people_filter = built from saved People filters. See auto_refresh for whether a people_filter audience keeps updating.

Available options:
csv_upload,
people_filter
Example:

"csv_upload"

status
enum<string>
required

Current state of the audience import. syncing means Whop is sending matched rows to connected ad accounts. When status is partial or failed, error_message explains what went wrong.

Available options:
pending,
processing,
syncing,
ready,
partial,
failed
total_rows
number
required

Total members detected in the source — CSV rows for uploaded lists, matching people for automatic audiences. Always 0 for lookalikes.

updated_at
string
required

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