---
title: "Apply discounts to a sale object"
method: POST
path: "/discount"
tags: ["Promotions"]
---

# Apply discounts to a sale object

`POST /discount`

This will find the best possible promotion to a sale, apply it and return the sale and the discount.

 * Despite its `POST` method, this endpoint does not modify any server-side state.
 * It is the caller's responsibility to pass along the full details of the sale, including all customer information and product information (product type, tags, etc.).

 🔒 Requires: `promotions:read` `outlets:read` scopes

## Request body

- DiscountParam
  - `channel` string, required — The channel where the sale is coming from
  - `customer` DiscountCustomerParam, required
    - `customer_group_id` string — Customer group ID
  - `is_tax_inclusive` boolean — Indication whether the sale is tax inclusive or tax exclusive
  - `outlet_id` string, required — The outlet ID for this sale
  - `promo_code` string — The promo code to apply to this sale
  - `sale` DiscountSaleParam, required
    - `line_items` DiscountLineItem[], required — Collection of line items.
      - `confirmed` boolean — Whether the line item is confirmed as part of a layby or on account sale.
      - `explicit_loyalty_value` boolean — Whether loyalty was explicitly set in the product or it just uses the default outlet ratio.
      - `handle` string, required — Handle.
      - `id` string — Line item ID.
      - `loyalty_value` number, double — The line item's loyalty value
      - `price_adjusted` boolean — Indicator to suggest that the price has been adjusted manually, such as through a discount.
      - `product_brand_id` string, required — Product Brand ID.
      - `product_id` string, required — Product ID
      - `product_supplier_id` string, required — Product Supplier ID.
      - `product_tag_ids` string[], required — Product Tag IDs.
      - `product_type_id` string, required — Product Type ID.
      - `promotion_ids` string[] — List of promotion IDs applied to this line item.
      - `quantity` integer, required — Quantity of the line item.
      - `unit_discount` number, double — The line item's unit discount
      - `unit_price` number, double, required — The unit price for the line item.
      - `unit_tax_discount` number, double, required — The line item's unit tax discount
      - `variant_parent_id` string — Product variant parent ID
    - `sale_date` string, required — Sale timestamp in UTC, e.g. `2006-01-02T15:04:05` (no timezone suffix).
    - `total_price` number, double, required — Total (tax exclusive) price of the sale
    - `total_tax` number, double, required — Total tax.

## Response `200`

- DiscountResponse
  - `data` DiscountResponseParam
    - `promo_code_validation` PromoCodeValidation
      - `promo_code` string, required — The promo code itself.
      - `promo_code_id` string, nullable — ID for the promo code.
      - `promotion_id` string, nullable — ID for the promotion.
      - `status` string, required — Status field for the promo code.
    - `promotions` PromotionDescription[]
      - `description` string — A short description for the promotion.
      - `id` string — Auto-generated object ID.
      - `name` string — The name of the promotion.
    - `sale` DiscountSaleParam
      - `line_items` DiscountLineItem[], required — Collection of line items.
        - `confirmed` boolean — Whether the line item is confirmed as part of a layby or on account sale.
        - `explicit_loyalty_value` boolean — Whether loyalty was explicitly set in the product or it just uses the default outlet ratio.
        - `handle` string, required — Handle.
        - `id` string — Line item ID.
        - `loyalty_value` number, double — The line item's loyalty value
        - `price_adjusted` boolean — Indicator to suggest that the price has been adjusted manually, such as through a discount.
        - `product_brand_id` string, required — Product Brand ID.
        - `product_id` string, required — Product ID
        - `product_supplier_id` string, required — Product Supplier ID.
        - `product_tag_ids` string[], required — Product Tag IDs.
        - `product_type_id` string, required — Product Type ID.
        - `promotion_ids` string[] — List of promotion IDs applied to this line item.
        - `quantity` integer, required — Quantity of the line item.
        - `unit_discount` number, double — The line item's unit discount
        - `unit_price` number, double, required — The unit price for the line item.
        - `unit_tax_discount` number, double, required — The line item's unit tax discount
        - `variant_parent_id` string — Product variant parent ID
      - `sale_date` string, required — Sale timestamp in UTC, e.g. `2006-01-02T15:04:05` (no timezone suffix).
      - `total_price` number, double, required — Total (tax exclusive) price of the sale
      - `total_tax` number, double, required — Total tax.

---

[API](https://skmtc.net/lightspeedhq/apis/api-2026-07.md) · [All operations](https://skmtc.net/lightspeedhq/apis/api-2026-07/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/lightspeedhq/api-2026-07/revisions/72d4ceb46dbb/schema)
