---
title: "Shopify product and shipping discounts combined, verified November 2026"
description: "Real carts with a Shopify product discount and a shipping discount together: one automatic discount carrying both, two codes that allow each other, and a free-shipping code refused in favour of a smaller product discount. Verified 3 November 2026 on Shopify's 2026-10 API."
url: https://offersuite.io/shopify/discount-combinations/product-and-shipping
updated: 2026-11-03
---

# A Shopify product discount and a shipping discount in one cart

A price cut and free shipping in the same cart. These carts get there two ways, and show what happens when the shipping discount is not set to combine.

Verified 3 November 2026 on Shopify’s 2026-10 API, in carts built on a real store. Each statement marked with a tick is checked against the cart Shopify returned.

## One automatic discount can give both

An app discount with a product class and a shipping class runs its function for the lines and again for the delivery options. Nothing has to combine: it is one discount.

**One automatic discount, a product class and a shipping class** Verified 3 November 2026 · API 2026-10

#### Into the cart

- 1 × Single Bag at $40.00, bought once
- The cart attribute the app discount's function reads
- A US delivery address, with the cheapest rate selected

#### What Shopify returned

The cart Shopify returned: One automatic discount, a product class and a shipping class

| Line | Quantity | Price | Discounts on the line | Line total |
| --- | --- | --- | --- | --- |
| Single Bag | 1 | $40.00 | −$10.00 automatic, “Offer Suite” | $30.00 |
| Discounts on the cart | none |  |  |  |
| Delivery: Standard selected Quoted: Standard $8.00, Express $15.00 | −$8.00 automatic, “Free shipping” | $0.00 |  |  |
| Cart total | $30.00 |  |  |  |

#### What that shows

- The line cost $30.00, with a $10.00 allocation named by the discount's title.
- The selected rate, Standard at $8.00, was discounted in full on the delivery group.
- The shipping allocation was named by the message the function gave its candidate, not by the discount's title.
- The same shipping allocation was also in the cart's own list, and the cart total was $30.00.

## Two codes that allow each other both apply

A free-shipping code set to combine with product discounts, and a product code set to combine with shipping discounts. The first cart is the free-shipping code alone.

**A free-shipping code** Verified 3 November 2026 · API 2026-10

#### Into the cart

- 1 × Single Bag at $40.00, bought once
- No cart attribute, so the app's functions return no operations
- Code VERIFY-SHIPFREE: free shipping, one-time purchases only, combines with product and order discounts
- A US delivery address, with the cheapest rate selected

#### What Shopify returned

The cart Shopify returned: A free-shipping code

| Line | Quantity | Price | Discounts on the line | Line total |
| --- | --- | --- | --- | --- |
| Single Bag | 1 | $40.00 | none | $40.00 |
| Discounts on the cart | none |  |  |  |
| Delivery: Standard selected Quoted: Standard $8.00, Express $15.00 | −$8.00 code VERIFY-SHIPFREE | $0.00 |  |  |
| Cart total | $40.00 |  |  |  |

- `VERIFY-SHIPFREE` applicable: true

#### What that shows

- The $8.00 Standard rate was discounted in full by the code, on the delivery group and in the cart's own list; the cart total was $40.00.

**A free-shipping code and a product code that allow each other** Verified 3 November 2026 · API 2026-10

#### Into the cart

- 1 × Single Bag at $40.00, bought once
- No cart attribute, so the app's functions return no operations
- Code VERIFY-SHIPFREE: free shipping, one-time purchases only, combines with product and order discounts
- Code VERIFY-BAG5: $5.00 off the bag, one-time purchases only, combines with product, order and shipping discounts
- A US delivery address, with the cheapest rate selected

#### What Shopify returned

The cart Shopify returned: A free-shipping code and a product code that allow each other

| Line | Quantity | Price | Discounts on the line | Line total |
| --- | --- | --- | --- | --- |
| Single Bag | 1 | $40.00 | −$5.00 code VERIFY-BAG5 | $35.00 |
| Discounts on the cart | none |  |  |  |
| Delivery: Standard selected Quoted: Standard $8.00, Express $15.00 | −$8.00 code VERIFY-SHIPFREE | $0.00 |  |  |
| Cart total | $35.00 |  |  |  |

- `VERIFY-BAG5` applicable: true
- `VERIFY-SHIPFREE` applicable: true

#### What that shows

- Both applied: $5.00 off the line and the $8.00 rate free, a cart total of $35.00.

## A free-shipping code that combines with nothing was refused, though it was worth more

The product code is the same. The free-shipping code is now set to combine with nothing.

Shopify kept the product code and refused the shipping code. Do not assume the buyer gets the better of two discounts that cannot combine: in this cart they did not.

**A free-shipping code that combines with nothing, and a product code** Verified 3 November 2026 · API 2026-10

#### Into the cart

- 1 × Single Bag at $40.00, bought once
- No cart attribute, so the app's functions return no operations
- Code VERIFY-SHIPFREE-SOLO: free shipping, one-time purchases only, combines with nothing
- Code VERIFY-BAG5: $5.00 off the bag, one-time purchases only, combines with product, order and shipping discounts
- A US delivery address, with the cheapest rate selected

#### What Shopify returned

The cart Shopify returned: A free-shipping code that combines with nothing, and a product code

| Line | Quantity | Price | Discounts on the line | Line total |
| --- | --- | --- | --- | --- |
| Single Bag | 1 | $40.00 | −$5.00 code VERIFY-BAG5 | $35.00 |
| Discounts on the cart | none |  |  |  |
| Delivery: Standard selected Quoted: Standard $8.00, Express $15.00 | none | $8.00 |  |  |
| Cart total | $43.00 |  |  |  |

- `VERIFY-BAG5` applicable: true
- `VERIFY-SHIPFREE-SOLO` applicable: false
- warning `DISCOUNT_CODE_NOT_HONOURED` “The VERIFY-SHIPFREE-SOLO discount code is not honoured”

#### What that shows

- Only the product code applied: $5.00 off the line, shipping charged at $8.00, a cart total of $43.00.
- The free-shipping code was listed as not applicable. The saving kept was the smaller one: $5.00 against the $8.00 the shipping code would have taken.

## Beside the automatic discount, the same code was refused too

The automatic discount already makes the rate free. A free-shipping code that combines with nothing, added to that cart, changed nothing.

**An automatic product and shipping discount, and a free-shipping code that combines with nothing** Verified 3 November 2026 · API 2026-10

#### Into the cart

- 1 × Single Bag at $40.00, bought once
- The cart attribute the app discount's function reads
- Code VERIFY-SHIPFREE-SOLO: free shipping, one-time purchases only, combines with nothing
- A US delivery address, with the cheapest rate selected

#### What Shopify returned

The cart Shopify returned: An automatic product and shipping discount, and a free-shipping code that combines with nothing

| Line | Quantity | Price | Discounts on the line | Line total |
| --- | --- | --- | --- | --- |
| Single Bag | 1 | $40.00 | −$10.00 automatic, “Offer Suite” | $30.00 |
| Discounts on the cart | none |  |  |  |
| Delivery: Standard selected Quoted: Standard $8.00, Express $15.00 | −$8.00 automatic, “Free shipping” | $0.00 |  |  |
| Cart total | $30.00 |  |  |  |

- `VERIFY-SHIPFREE-SOLO` applicable: false
- warning `DISCOUNT_CODE_NOT_HONOURED` “The VERIFY-SHIPFREE-SOLO discount code is not honoured”

#### What that shows

- The automatic discount kept both of its parts: $10.00 off the line and the $8.00 rate free, a cart total of $30.00.
- The code was listed as not applicable.

## How this was verified

Every cart on this page was built through the Storefront API on a Shopify Plus development store we keep for this, on API version 2026-10, and read back as Shopify priced it. The store sells one product in these carts: Single Bag, at $40.00, also sold on a selling plan named “Every 30 days” that has no pricing policy. It quotes two delivery rates to a US address.

It has one automatic app discount, titled “Offer Suite”, with a product class and a shipping class, set to combine with product, order and shipping discounts. Its function reads a cart attribute: with it, the function takes 25% off one unit of Single Bag bought once, or $8.00 off the unit on its selling plan, and makes the cheapest delivery rate free. Without it, the function returns no operations.

The other discounts in these carts, as they are set on the store

| Discount | Class | Gives | Combination setting |
| --- | --- | --- | --- |
| Code VERIFY-SHIPFREE | Shipping | free shipping, one-time purchases only | combines with product and order discounts |
| Code VERIFY-BAG5 | Product | $5.00 off the bag, one-time purchases only | combines with product, order and shipping discounts |
| Code VERIFY-SHIPFREE-SOLO | Shipping | free shipping, one-time purchases only | combines with nothing |

A suite builds these carts again and reads the discount settings from the store before it does. A statement that no longer matches the cart takes this page down until it is corrected, and no cart stands for more than 90 days without being built again. This is what one store returned on one API version: your store’s plan, markets and other apps can change the result, so build the cart.

Seen something different on your store? Write to [privacy@offersuite.io](mailto:privacy@offersuite.io) with the cart and we’ll run it.

## Related

- [Shopify, verified **Shopify offer mechanics, verified on a real store** How Shopify discounts, discount functions, cart transforms, selling plans, the Storefront cart and their limits behave, shown in real carts built on a Shopify store and built again at least every 90 days.](https://offersuite.io/shopify)
- [Calculator **Free shipping threshold calculator** Price a free-shipping threshold with the shipping you give away on orders that already reach it, and the share of smaller orders that must top up to pay for it.](https://offersuite.io/calculators/free-shipping-threshold)
- [Shopify, verified **Shopify product and order discounts combined, verified November 2026** Real carts with a Shopify product discount and an order discount together: both applied when each allowed the other, the order discount was taken from the discounted subtotal, and a code that combines with nothing was refused. Verified 3 November 2026 on Shopify's 2026-10 API.](https://offersuite.io/shopify/discount-combinations/product-and-order)
- [Shopify, verified **Two Shopify product discounts on one line, verified November 2026** Real carts with two Shopify product discounts aimed at one line: they did not stack even when both allowed product discounts, and a larger code that combines with nothing replaced the automatic discount. Verified 3 November 2026 on Shopify's 2026-10 API.](https://offersuite.io/shopify/discount-combinations/product-and-product)
- [Shopify, verified **Shopify order and shipping discounts combined, verified November 2026** Real carts with a Shopify order discount and a free-shipping discount together: both applied when each allowed the other, the free-shipping code was refused when either side combined with nothing, and one cart carried all three classes. Verified 3 November 2026 on Shopify's 2026-10 API.](https://offersuite.io/shopify/discount-combinations/order-and-shipping)
- [Shopify, verified **Shopify discount functions, verified November 2026** What a Shopify discount function's output looks like in a real Storefront cart: where the allocation lands, a line split by a partial discount, and one discount with a product and a shipping class. Verified 3 November 2026 on Shopify's 2026-10 API.](https://offersuite.io/shopify/discount-functions)
