Update an audience
Updates name and/or filters (at least one required). Pass the latest row’s updatedAt as expectedUpdatedAt to reject stale read-modify-write edits. Returns the bare updated row. Replacement filters follow the same email-list rule as create: an email in [...] clause over 100 addresses is converted into a stamped custom-field snapshot (a fresh field per update), reported as emailListMaterializations.
Authorizations
Send your Brew API key as Authorization: Bearer brew_xxx.
Headers
The brand this request acts on. REQUIRED for organization-scoped credentials (otherwise 400 BRAND_ID_REQUIRED — there is no default brand); list ids with GET /v1/brands. Brand-scoped credentials may omit it, and sending a different brand returns 403 BRAND_SCOPE_MISMATCH. A brand outside your organization returns 404 BRAND_NOT_FOUND.
1 - 64Path Parameters
Audience id (opaque Convex document id) returned by POST /v1/audiences and listed by GET /v1/audiences.
1 - 64"jn7a8w4q8m9k2p1x7c3b5v6n9h7s2d4f"
Body
1 - 200Filter clauses combined by logicalOperator. For specific addresses use { field: "email", operator: "in", value: ["a@x.com", ...] } — a list over 100 addresses is auto-converted into a stamped custom-field snapshot of the listed EXISTING contacts (addresses without a contact record are skipped; 10,000 max).
Optional optimistic-concurrency precondition from the latest audience read. The update returns 409 if the row changed meanwhile.
Response
Updated.
1 - 641 - 200x >= 0pending, running, ready, failed Present when an email in [...] clause with more than 100 addresses was auto-converted into a stamped custom-field snapshot.