---
title: "Update Audience"
method: PATCH
path: "/audiences/{audience_id}"
tags: ["Audiences"]
---

# Update Audience

`PATCH /audiences/{audience_id}`

Renames an audience. For an audience built from People filters that keeps itself up to date, pass `filters` to replace them, which rebuilds membership immediately. Whether an audience auto refreshes is set when it is created.

## Path parameters

- `audience_id` string, required

## Request body

- object
  - `filters` object — Replaces the People filters that define membership. The whole definition is replaced rather than merged, so send every filter you want to keep — a filter you leave out stops applying. Keys and values are the ones `GET /people` accepts, such as an `os` of `iOS` or a `country` of `US`, and at least one filter is required. Date filters must be rolling windows — `first_seen_within_days` or `last_seen_within_days` — so the audience re-anchors every time it rebuilds; fixed dates such as `first_seen_after` are rejected, as is `audience_id`. An array value holds at most 500 items, and each value at most 10 KB. Only an audience with a `source_type` of `people_filter` and `auto_refresh` of `true` accepts filters: an uploaded list has no filters to replace, and with auto refresh off the audience keeps the people it matched when it was built, so create a new audience instead.
  - `name` string — New audience display name. A blank value is ignored rather than clearing the name.

## Response `200`

Audience updated.

- Audience
  - `audience_type` 'custom' | 'lookalike', required — `custom` = a customer list (uploaded, or built from saved People filters); `lookalike` = Meta lookalike built from a custom audience.
  - `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, nullable, required — Processing error message. `null` unless processing is partial or failed.
  - `filters` object, nullable, 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, nullable, required — When the audience membership was last rebuilt, as an ISO 8601 timestamp. `null` until the first build completes.
  - `lookalike_ratio` number, nullable, 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, nullable, required — For lookalikes: the lower bound of the similarity band as a fraction. `null` for custom audiences and first-tier lookalikes.
  - `match_rates` AudienceMatchRate[], required
    - `lower_bound` number, nullable, required — Lower bound of the estimated match rate percentage. `null` until available.
    - `platform` 'meta', required — The ad platform that provided the match-rate estimate.
    - `status` 'calculating' | 'available' | 'unavailable' | 'null', nullable, required — Availability of the estimated match rate.
    - `upper_bound` number, nullable, required — Upper bound of the estimated match rate percentage. `null` until available.
  - `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
  - `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, nullable, required — For lookalikes: the audience this lookalike was built from. `null` for custom audiences.
  - `source_type` 'csv_upload' | 'people_filter', 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.
  - `status` 'pending' | 'processing' | 'syncing' | 'ready' | 'partial' | 'failed', 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.
  - `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.

## Other responses

- `401` — Unauthorized

---

[API](https://skmtc.net/whop/apis/whop-api.md) · [All operations](https://skmtc.net/whop/apis/whop-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/whop/whop-api/versions/866821546d67/schema)
