---
title: "Validate Promo Code"
method: POST
path: "/api/v1/playbooks/{playbook_id}/promo-codes/validate"
tags: ["playbook-pricing"]
---

# Validate Promo Code

`POST /api/v1/playbooks/{playbook_id}/promo-codes/validate`

## Request

- Base URL: `https://api.badgeia.com`
- URL: `https://api.badgeia.com/api/v1/playbooks/{playbook_id}/promo-codes/validate`
- Auth: none declared

Buyer-side validation for the purchase modal (FR-12).

Returns `valid=true` + the discount math when usable; otherwise returns
`valid=false` + a human-readable `reason` (without leaking which check
failed beyond what the buyer already knows).

## Path parameters

- `playbook_id` string, uuid, required

## Request body

- PromoValidateRequest: Buyer-side: 'is this code valid for me on this playbook?'
  - `code` string, required

## Response `200`

Successful Response

- PromoValidateResponse: Buyer-side validation result. Never reveals seller-only fields like max_redemptions or per-buyer eligibility logic — only enough for the UI to say "code applied: $X off".
  - `valid` boolean, required
  - `code` string, nullable
  - `discount_type` string, nullable
  - `discount_value` integer, nullable
  - `discounted_price_cents` integer, nullable
  - `list_price_cents` integer, nullable
  - `reason` string, nullable

## 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)
