Create an audience
Creates a saved audience from a name + filter set ({ filters: [{ field, operator, value? }], logicalOperator: "and" | "or" }). Returns 201 with the bare audience row. An email in [...] clause listing more than 100 addresses is converted automatically: a fresh date custom field is stamped on the listed EXISTING contacts and the stored filter becomes customFields.<field> is_not_empty (a snapshot — addresses with no contact record are skipped), reported back as emailListMaterializations; 10,000 addresses max per clause.
Authorizations
Send your Brew API key as Authorization: Bearer brew_xxx.
Headers
Optional idempotency key for safe retries. Reusing the same key with the same request body returns the original response for 24 hours.
1 - 100The 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 - 64Body
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).
Response
Created.
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.