---
title: "Bulk Update Audience Suggestions"
method: PATCH
path: "/campaigns/audience-builds/{build_id}/suggestions"
tags: ["campaigns"]
---

# Bulk Update Audience Suggestions

`PATCH /campaigns/audience-builds/{build_id}/suggestions`

Include or exclude multiple suggested audience customers.

## Path parameters

- `build_id` string, required

## Request body

- BulkUpdateAudienceSuggestionsRequest
  - `suggestion_ids` string[], required
  - `included` boolean, required

## Response `200`

Successful Response

- CampaignAudienceBuild
  - `id` string, required
  - `status` string, required
  - `progress` integer
  - `step` string
  - `activity` string[]
  - `description` string, required
  - `interpreted_plan` object
  - `error_message` string, nullable
  - `candidate_count` integer
  - `suggested_count` integer
  - `selected_count` integer
  - `audience_limit` integer, nullable
  - `objective` CampaignObjective — The WHY of a campaign: the stated goal and how a win will be verified.
    - `id` string, required
    - `text` string, required
    - `source` string, required
    - `mode` string
    - `outcome_key` string, nullable
    - `label` string
    - `conversation_test` string
    - `reasoning` string
    - `resolved_at` string, nullable
  - `suggestions` AudienceSuggestion[]
    - `id` string, required
    - `st_customer_id` string, nullable
    - `member_key` string
    - `customer_name` string, required
    - `phones` string[]
    - `emails` string[]
    - `location_addresses` string[]
    - `customer_tags` object[]
    - `location_tags` object[]
    - `membership_type_names` string[]
    - `service_names` string[]
    - `explanation` string
    - `reasons` string[]
    - `confidence` number
    - `included` boolean
    - `rank` integer
    - `recent_campaign_contacts` RecentCampaignContact[]
      - `campaign_id` string, required
      - `campaign_name` string, required
      - `contacted_at` string, required
      - `status` string
    - `active_followup_overlap` boolean
    - `active_followup_count` integer
    - `active_followup_statuses` string[]
  - `accepted_campaign_id` string, nullable
  - `created_at` string, required
  - `updated_at` string, nullable

## Other responses

- `404` — Not found
- `422` — Validation Error

## Changes

- **2026-09-16** `46c87bbc4486` — 1 info
  - added the optional property `accepted_campaign_id` to the response with the `200` status
- **2026-09-12** `a89ec63b4428` — 1 info
  - added the optional property `objective` to the response with the `200` status
- **2026-09-10** `8eb1d6b3ce25` — 2 breaking, 1 info
  - the response property `suggestions/items/st_customer_id` became optional for the status `200`
  - response property `suggestions/items/st_customer_id` list-of-types was widened by adding types `null` to media type `application/json` of response `200`
  - added the optional property `suggestions/items/member_key` to the response with the `200` status
- **2026-09-02** `d96feef8e2ef` — 1 info
  - added the optional property `suggestions/items/location_tags` to the response with the `200` status

[Change history](https://skmtc.dev/noso/apis/crucible-backend-api/changes/campaigns/audience-builds/:build_id/suggestions/patch.md)

---

[API](https://skmtc.dev/noso/apis/crucible-backend-api.md) · [All operations](https://skmtc.dev/noso/apis/crucible-backend-api/llms.txt) · [OpenAPI document](https://skmtc.dev/noso/apis/crucible-backend-api/revisions/46c87bbc4486?raw)
