---
title: "Get campaign settings quotes (v2)"
method: GET
path: "/api/v1/discovery/campaign-settings-quotes-v2/{id}"
tags: ["discovery"]
---

# Get campaign settings quotes (v2)

`GET /api/v1/discovery/campaign-settings-quotes-v2/{id}`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/discovery/campaign-settings-quotes-v2/{id}`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Review a Save of a Discovery campaign's settings before making it, writing nothing: each change and when it starts (from the next run; a run under way finishes on what it reserved), the change in estimated monthly conversations at today's price with any one-time work, Billing's answer to the extra work, how the change reaches results, and who a lower customer count removes. Pass the settingsRevision discovery_campaign_settings_get returned as expectedSettingsRevision; refused when the settings changed since. `id` is the campaign's id.

## Path parameters

- `id` string, uuid, required: Discovery campaign id.

## Query parameters

- `expectedSettingsRevision` integer, required: The settingsRevision the settings read (or a quote) returned.
- `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.
- `removeStoreKeys` string[]: Stores to stop measuring, by key: their customers leave at once and their history stays.
- `addStores` string[]: Stores to add, each one JSON-encoded store pick as the update takes it.

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- DiscoveryCampaignSettingsQuotesGetV2Response
  - `settingsRevision` integer, required: The settings revision this quote read; pass it as expectedSettingsRevision.
  - `requiresReview` boolean, required: Whether the Save changes money or results, so Billing is asked about its work and a quoted estimate is re-checked; false when it changes only the name.
  - `changes` DiscoveryItem[], required: Each change and when it 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.
  - `estimate` DiscoveryEstimate, nullable, required: The change in estimated monthly usage; null when no work changes.
    - `unit` object, required: What a unit of work is: a conversation, a visit, an interview.
      - `singular` string, required
      - `plural` string, required
    - `monthlyBefore` integer, required: Estimated units a month today.
    - `monthlyAfter` integer, required: Estimated units a month after the Save.
    - `unitPriceCents` integer, nullable, required: Today's price of one unit, in cents; null when Billing could not price it.
    - `monthlyChangeCents` integer, nullable, required: The change in estimated monthly cost, in cents; null when unpriced.
    - `oneTime` object[], required: One-time work the Save starts.
      - `kind` 'customer_generation' | 'catch_up_run' | 'store_setup' | 'places_search', required
      - `summary` string, required: The work, in plain words.
      - `quantity` integer, required: How many units of it.
      - `amountCents` integer, nullable, required: Its estimated cost at today's price, in cents; null when it has no estimate.
  - `billing` union, required
    - object
      - `outcome` 'not_needed', required
    - object
      - `outcome` 'admitted', required
    - object
      - `outcome` 'refused', required
      - `reason` string, required: Billing's refusal reason.
      - `message` string, required: Billing's refusal, in its own words.
      - `paymentDisputeHold` boolean, required: Whether the account is held for a payment dispute, which a new card does not lift.
  - `resultsNote` string, nullable, required: How the change reaches results; null when results do not change.
  - `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
  - `customersLeaving` object[], required: Who a lower customer count removes when removeCustomerIds names no one: the newest joined first.
    - `customerId` string, uuid, required
    - `name` string, required
    - `joinedAt` string, date-time, required

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `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)
