---
title: "Get Price Quote"
method: GET
path: "/api/v1/playbooks/{playbook_id}/price-quote"
tags: ["playbook-pricing"]
---

# Get Price Quote

`GET /api/v1/playbooks/{playbook_id}/price-quote`

## Request

- Base URL: `https://api.badgeia.com`
- URL: `https://api.badgeia.com/api/v1/playbooks/{playbook_id}/price-quote`
- Auth: none declared

Buyer-side: compute the price *this viewer* should pay (FR-05).

Logic:
  1. If a running experiment exists, bucket the viewer (sticky) and
     return the variant's price as `price_cents`.
  2. Otherwise return canonical `list_price_cents` as `price_cents`.
  3. If a valid anchor (FR-11) exists, attach `anchor_was_cents`.
  4. If `promo_code` is provided AND active, apply discount on top and
     return `effective_price_cents` post-discount.

No auth required — this powers the public buyer page. We do NOT persist
a `playbook_price_assignments` row from this endpoint; we only persist
when the buyer actually clicks "Hire" (i.e., from the purchase endpoint).
Reason: persisting on every page-view would balloon the table and bias
the bucket-stickiness check toward the wrong side of the funnel.

## Path parameters

- `playbook_id` string, uuid, required

## Query parameters

- `promo_code` string, nullable
- `bucket_cookie` string, nullable

## Response `200`

Successful Response

- PriceQuoteResponse: Computed price for a viewer of /playbooks/{id}. Includes the variant assignment (if any), the anchor "was/now" pair (if valid per FR-11), and the platform fee that would be deducted from the creator's payout (so creator-side dashboards can show net economics). `is_experiment_variant` lets the UI show a transparent "Test price" indicator (PRD-008 FR-05 & R-02 cohort guardrail).
  - `playbook_id` string, uuid, required
  - `list_price_cents` integer, required
  - `price_cents` integer, required
  - `is_experiment_variant` boolean, required
  - `experiment_id` string, uuid, nullable, required
  - `variant_label` string, nullable, required
  - `anchor_was_cents` integer, nullable
  - `anchor_valid_until` string, date-time, nullable
  - `promo_code` string, nullable
  - `discount_cents` integer
  - `effective_price_cents` integer, required

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/badgeia/apis/badge.md) · [All operations](https://skmtc.dev/badgeia/apis/badge/llms.txt) · [OpenAPI document](https://skmtc.dev/badgeia/apis/badge/revisions/7e7f7fee8b77?raw)
