---
title: "Update campaign settings"
method: POST
path: "/api/v1/discovery/campaign-settings/update"
tags: ["discovery"]
deprecated: true
---

# Update campaign settings

`POST /api/v1/discovery/campaign-settings/update`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/discovery/campaign-settings/update`
- Auth: OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

> **Deprecated.**

Deprecated: use discovery.campaign-settings.update.v2 (discovery_campaign_settings_update_v2), which takes no audience, targetedGroupIds or removeCustomersOutsideAudience: a campaign's audiences are fixed at launch. This version still changes them. Save a Discovery campaign's settings in place, all or nothing: its name, assistants, customers (who and how many), audiences and a store campaign's stores. Results continue on the same campaign and take in the change over its next 30 days; changes reach the next run, and a run under way finishes on what it reserved. Nothing is charged at Save: delivered conversations accrue against the plan. Pass expectedSettingsRevision from discovery.campaign-settings.get; a Save whose settings moved since is refused (STALE_WRITE). Pass reviewedEstimate from discovery.campaign-settings-quotes.get to also refuse one whose estimate moved, or null to save at the current estimate. The website never changes. A person confirms it.

## Headers

- `Point11-Organization` string, uuid
- `Idempotency-Key` string, uuid, required
- `Point11-Confirm` 'true', required

## Request body

- DiscoveryCampaignSettingsUpdateRequest
  - `campaignId` string, uuid, required: The campaign's id.
  - `expectedSettingsRevision` integer, required: The settingsRevision the settings read (or a quote) returned.
  - `reviewedEstimate` object, nullable, required: The estimate a quote returned (its reviewedEstimate): the Save is refused if it moved. Null saves at the current estimate.
    - `monthlyAfter` integer, required
    - `unitPriceCents` integer, nullable, required
    - `oneTimeAmountCents` integer, nullable, required
  - `changes` object, required
    - `name` string: The campaign's new name.
    - `engines` string[]: The assistants the campaign asks from its next run: the whole set, at least one. Add, remove or swap; past conversations stay.
    - `engineCatchUp` boolean: When an assistant is added: also run it once, within a day, for the customers this month's runs already refreshed (true when omitted), so its results are complete this month.
    - `customerCount` integer: How many customers it runs: the campaign's total, or, on a store campaign, the customers per store. Raising it adds eligible customers, then generates the rest; lowering it removes the newest joined first unless removeCustomerIds names who leaves.
    - `addCustomerIds` string[]: Customers to add; each joins this month's calendar.
    - `removeCustomerIds` string[]: Customers to remove; each leaves every later run at once and keeps its history.
    - `audience` 'all' | 'groups': Who can be added: every eligible customer (all) or members of targetedGroupIds (groups). It never resamples the current customers.
    - `targetedGroupIds` string[]: The audiences, with audience groups.
    - `removeCustomersOutsideAudience` boolean: With a new audience: also remove the current customers outside it.
    - `removeStoreKeys` string[]: Stores to stop measuring, by key: their customers leave at once and their history stays.
    - `addStores` DiscoveryAddressesItem[]: Stores to add to a store campaign, as the Google Maps finder picked them; each starts once its customers are ready.
      - `googlePlace` object, nullable
        - `placeId` string, required
        - `requestToken` string, uuid, required
        - `callId` string, uuid, required
        - `requestFingerprint` string, required
      - `label` string, nullable
      - `storeId` string, nullable
      - `street` string, nullable
      - `city` string, nullable
      - `region` string, nullable
      - `postalCode` string, nullable
      - `country` string, nullable
      - `latitude` number, nullable
      - `longitude` number, nullable
      - `url` string, nullable
      - `notes` string, nullable
      - `serviceArea` object
        - `campaignBoundary` object
          - `areas` object[], required
            - `query` string, required
            - `countryCode` string, nullable
            - `weightPct` number, nullable
          - `evidenceNote` string, nullable
        - `configuredRule` object
          - `strategy` 'premises_deepest_reliable', required
          - `version` 'physical-service-area:v1', required

## Response `200`

Success.

- DiscoveryCampaignSettingsUpdateResponse
  - `campaignId` string, uuid, required
  - `changed` boolean, required: False when the Save asked for the settings the campaign has.
  - `settingsRevision` integer, required: The campaign's revision now.
  - `changes` DiscoveryItem[], required: What changed and when each starts.
    - `field` string, required: The setting this change moves, in the product's own word (engines, customers…).
    - `summary` string, required: The change and when it starts, in plain words.
    - `starts` 'now' | 'next_run' | 'next_cycle' | 'next_admission_day' | 'when_ready', required: When the change takes effect.
    - `startsAt` string, date-time, nullable, required: The instant it takes effect when known; null when it waits on setup.

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `402`: Billing refused the write: the code names the reason and `details.reason` carries it.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

[API](https://skmtc.dev/point11/apis/point11-api.md) · [All operations](https://skmtc.dev/point11/apis/point11-api/llms.txt) · [OpenAPI document](https://skmtc.dev/point11/apis/point11-api/revisions/36a84c7aca11?raw)
