---
title: "Get precision quotes"
method: GET
path: "/api/v1/campaigns/precision-quotes/{id}"
tags: ["campaigns"]
---

# Get precision quotes

`GET /api/v1/campaigns/precision-quotes/{id}`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/campaigns/precision-quotes/{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`)

Price an order that raises one reading of a campaign (`id`) to Standard precision (±5 points): pass the reading's group (`cohort`: the whole campaign, its attribute buckets, or an outcome) and its customers. A campaign that takes no order is refused (409, its product's reason and next step in details.control); otherwise returns its product's verdict (control), the customers one order adds (eligible existing customers inside the group first, the rest generated, within the campaign's limits), the margin they reach, and every monthly and one-time charge; place it with campaigns_precision_orders_start.

## Path parameters

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

## Query parameters

- `cohort` 'campaign' | 'attribute' | 'outcome', required: What the reading counts: the whole campaign, attribute buckets, or an outcome.
- `buckets` string[]: The group's buckets (an outcome's `within`), each "<dimensionId>:<bucketId>", one per dimension: `audience_mix:<id>`, `store:<location key>`.
- `customers` integer, required: The reading's customers: the distinct customers behind its value in its span.
- `outcomeOf` integer: For an outcome: the distinct customers, in the same span, of what it sits in (the campaign, or its buckets).

## Headers

- `Point11-Organization` string, uuid

## Response `200`

Success.

- CampaignsPrecisionQuotesGetResponse
  - `control` object, required: The campaign's product's verdict on a precision order, for this caller.
    - `available` boolean, required
    - `reason` string, required: The product's reason, `ok` when the campaign takes an order (Discovery: `published_pilot` when it starts the customer's own campaign instead).
    - `title` string, required
    - `detail` string, required
    - `action` object: The one next step a refusal offers, when the reader has one.
      - `label` string, required
      - `href` string, required
  - `campaignCustomers` integer, required: The roster the order grows.
  - `limits` object, required
    - `campaignCustomerMax` integer, required: The most customers a campaign holds.
    - `orderCustomerMax` integer, required: The most customers one order adds.
    - `maxAddedCustomers` integer, required: The most one order adds to this campaign now.
  - `focus` object[], nullable, required: The buckets the order sources inside and its customers carry; null in the campaign's normal mix.
    - `dimensionId` 'audience_mix' | 'channel_mix' | 'regional_mix' | 'age_mix' | 'household_income_mix' | 'education_mix' | 'life_stage_mix' | 'urbanicity_mix' | 'company_size_mix' | 'buyer_role_mix' | 'seniority_mix' | 'occupation_mix' | 'job_mix' | 'trigger_type_mix' | 'intent_stage_mix' | 'language_mix' | 'gender_mix' | 'store', required: A customer attribute's dimension (audience_mix, channel_mix, regional_mix, age_mix, ...), or `store` for a location campaign's store.
    - `bucketId` string, required: The bucket's id in that dimension; a store's location key.
  - `order` object, required
    - `customers` integer, required: Customers one order adds: the reading's gap to Standard, or the most the limits and the eligible pool allow.
    - `reach` object, required: The reading's customers and margin once they are measured; an outcome's expected ones.
      - `customers` integer, required
      - `marginPts` number, nullable, required
    - `reachable` boolean, required: Whether that reach is Standard; false states the best one order buys.
  - `filled` integer, required: Of them, eligible customers already in the organization, admitted at once.
  - `generated` integer, required: Of them, customers generated for the order.
  - `price` object, nullable, required: Every charge; pass it unchanged as the start's expectedPrice. Null when the order adds no one.
    - `customers` integer, required: Customers the order adds.
    - `recurring` object, nullable, required: The interactions the added customers bring every `period`, at the live price: Discovery's conversation per customer, assistant and lane each month, a recurring Research study's interview per customer each day, week or month, an always-on Experience campaign's visits each month. Null where none repeat.
      - `productSlug` string, required
      - `dimensionKey` string, required
      - `unitPriceCents` integer, required
      - `quantity` integer, required
      - `totalCents` integer, required
      - `period` 'day' | 'week' | 'month', required: The period the charge repeats over.
    - `once` object, nullable, required: The interactions the added customers bring once, at the live price: a Research study that ran once interviews them in a top-up wave, a one-time Experience campaign visits them in a top-up cycle. Null where none.
      - `productSlug` string, required
      - `dimensionKey` string, required
      - `unitPriceCents` integer, required
      - `quantity` integer, required
      - `totalCents` integer, required
    - `oneTime` object, nullable, required: The customers the order generates because the eligible pool runs short, charged once each at the customer-generation price; null when eligible customers fill the whole order. A start may generate fewer than reviewed, never more.
      - `productSlug` string, required
      - `dimensionKey` string, required
      - `unitPriceCents` integer, required
      - `quantity` integer, required
      - `totalCents` integer, required
  - `unavailableStores` object[], required: Stores in the order where no customers can be generated now; each adds only its eligible customers, which `order` and `generated` already count.
    - `storeKey` string, required: The store, by its location key.
    - `code` string, required: Why: `STORE_PROFILE_MISSING` when the store has no store profile yet, or one that can't generate customers now (its Refresh, or the campaign's next setup, fixes it); `PRECISION_OVERRIDE_UNSUPPORTED` when its profile doesn't hold the group the order is for.
    - `message` string, required: The reason in the owner's words.
    - `label` string, nullable, required: The store's name, where its owner knows one; null names it by its key.
    - `action` object, nullable, required: Where to fix it, where there is one: the store's page, whose Refresh gives it a store profile and which shows what its profile holds.
      - `label` string, required
      - `href` string, 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)
